自学内容网 自学内容网

计算机通信

一.进程和线程的区别?

1. 进程是资源分配的最小单位, 线程是cpu进行调度的最小单位。

2. 一个进程可以看做一个运行的程序, 一个进程中可以包含多个线程, 线程在进程内执行。

3. 多进程是指操作系统能同时运行多个任务(程序),多线程是指在同一程序中有多个顺序流在执行。

4. 进程拥有自己的内存空间。线程使用进程的内存空间,和该进程的其他线程共享这个空间。

5. 线程可以控制同一进程的其他线程。进程无法控制兄弟进程,只能控制其子进程。

6. 线程可以使用 wait(),notify(),notifyAll()等方法直接与其他线程(同一进程)通信, 进程需要使用“进程间通信”(IPC)来与操作系统中的其他进程通信。

7. 在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

二. 什么是线程的上下文

1. 某一时间点CPU寄存器和程序计数器的内容,被称为上下文。

2. 寄存器是CPU内部的少量速度很快的闪存。

3. 程序计数器是一个专用的寄存器,被用来表示指令序列中CPU正在执行的位置。

三.什么会引起线程的上下文切换

1. 当前线程任务正常完成,CPU调度下一个任务

2. 当前任务被挂起,比如用了sleep方法,wait方法,yeild方法等,让出了CPU

3. 多个任务抢占锁资源,当前任务没抢到,就会被调度器挂起,然后调度器会执行下一个任务

4. 当前任务执行I/O等会引起阻塞的操作,调度器会挂起这个任务,然后执行下一个任务

四. Java 进程间的几种通信方式

1. 管道(pipe): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2. 有名管道 (named pipe): 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信

3. 信号量(semophore): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4. 消息队列(message queue): 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大 小受限等缺点

5. 信号 (sinal): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生

6. 共享内存(shared memory): 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信

7. 套接字(socket):套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

五.信号量与信号的区别?

1. 信号:(signal)是一种处理异步事件的方式。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。

2. 信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

3. 简单地说,信号就是一种异步通信,通知进程某种事件的发生;信号量是进程/线程同步与互斥的一种机制,保证进程/线程间之间的有序执行或对公共资源的有序访问。

六.select、poll、epoll 区别有哪些?

1. select:它仅仅知道了,有 I/O 事件发生了,却并不知道是哪那几个流(可能有一个,多个, 甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以 select 具有 O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。

2. poll:poll 本质上和 select 没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个 fd 对应的设备状态,但是它没有最大连接数的限制,原因是它是基于链表来存储的.

3. epoll:epoll 可以理解为 event poll,不同于忙轮询和无差别轮询,epoll 会把哪个流发生了怎样的 I/O 事件通知我们。所以我们说 epoll 实际上是事件驱动(每个事件关联上 fd)的,此时我们对这些流的操作都是有意义的。(复杂度降低到了 O(1)),通过红黑树和双链表数据结构,并结合回调机制,造就了 epoll 的高效,epoll_create(),epoll_ctl()和 epoll_wait()系统调用。

七.select 和 epoll 的底层结构是什么原理

1. select: 支持阻塞操作的设备驱动通常会实现一组自身的等待队列如读/写等待队列用于支持上层(用户层)所需的 BLOCK 或 NONBLOCK 操作。当应用程序通过设备驱动访问该设备时 (默认为 BLOCK 操作),若该设备当前没有数据可读或写,则将该用户进程插入到该设备驱动对应的读/写等待队列让其睡眠一段时间,等到有数据可读/写时再将该进程唤醒。 select 就是巧妙的利用等待队列机制让用户进程适当在没有资源可读/写时睡眠,有资源可读/写时唤醒。

2. epoll: epoll由三个系统调用组成,分别是 epoll_create,epoll_ctl 和 epoll_wait。 epoll_create 用于创建和初始化一些内部使用的数据结构;epoll_ctl 用于添加,删除或者修改指定的 fd 及其期待的事件,epoll_wait 就是用于等待任何先前指定的 fd 事件。

八.当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤?

1. 域名解析

2. 发起 TCP 的 3 次握手

3. 建立 TCP 连接后发起 http 请求

4. 服务器响应 http 请求

5. 浏览器得到 html 代码

6. 浏览器解析 html 代码,并请求 html 代码中的资源(如 js、css、图片等)

7. 浏览器对页面进行渲染呈现给用户 。

九.UDP 协议和 TCP 协议的区别?

1. TCP 基于连接,UDP 基于无连接

2. TCP 要求系统资源较多,UDP 较少

3. UDP 程序结构较简单

4. TCP 保证数据正确性,UDP 可能丢包

5. TCP 保证数据顺序,UDP 不保证

十.父进程如果宕掉,子进程会怎样?

1. 如果父进程是会话首进程,那么父进程退出后,子进程也会退出;

2. 如果父进程不是会话首 进程,那么父进程退出后,子进程不会退出,而它的一个或多个子进程还在运行,那么这些子 进程就成为孤儿进程。

十一. 孤儿进程和僵尸进程有什么区别?

1. 孤儿进程:父进程结束了,而它的一个或多个子进程还在运行,那么这些子进程就成为孤儿进 程(father died)。子进程的资源由 init 进程(进程号 PID = 1)回收。

2. 僵尸进程:子进程退出了,但是父进程没有用 wait 或 waitpid 去获取子进程的状态信息, 那么子进程的进程描述符仍然保存在系统中,这种进程称为僵死进程。


原文地址:https://blog.csdn.net/xyy1028/article/details/138773055

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!