答案:
进程是资源分配的基本单位,他是程序执行时的一个实例,在程序运行是创建。
线程是程序执行的最小单位,是进程的一个执行流,一个进程里包含多个线程。
答案:
协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。
进程和线程区别:(开销问题、通信、线程(进程)之间影响)
线程和协程的区别:
其他区别:
答案:
频繁修改:需要频繁创建和销毁的优先使用多线程
计算量:需要大量计算的优先使用多线程 因为需要消耗大量CPU资源且切换频繁,所以多线程好一点
相关性:任务间相关性比较强的用多线程,相关性比较弱的用多进程。因为线程之间的数据共享和同步比较简单。
多分布:可能要扩展到多机分布的用多进程,多核分布的用多线程。
但是实际中更常见的是进程加线程的结合方式,并不是非此即彼的。
答案:
答案:
有五种状态:创建、就绪、运行、阻塞、终止
在linux系统中,进程的生命周期是从执行到终止
答案:
1.管道(pipe)
2.信号量(semophore)
3.消息队列(messge queue)
4.信号(signal)
5.共享内存(Shared memory)
6.套接字(socket)
管道:分为有名和无名管道,无名管道只能有血缘关系的进程间通信,是半双工通信,而有名管道允许无血缘进程之间通信。
信号量:是个计数器,用来控制多个进程对共享资源的访问,用于进程间的同步和互斥。
消息队列:消息的链接表,放在内核中,消息队列独立于发送和接收的进程,进程终止后,消息队列并不会消失,消息队列可以实现消息的随机查询,可以按照消息的类型读取。
信号:用于通知接收进程某个事件已经发生。主要作为进程间以及同一进程的不同线程间的同步手段。
共享内存:共享内存就是映射一段能被其他进程访问的内存,这段共享内存有一个进程创建,但多个进程都可以访问,共享内存是最快的IPC,它往往配合其他通信机制使用,如:信号量来实现同步和通信。
原理:开辟一个物理内存空间,各个进程物理地址映射到自己的虚拟地址空间,通过虚拟地址就可以直接访问,进而实现数据共享,共享内存是最快的通信方式,因为少了数据的拷贝。
套接字:它可用于不同机器之间的进程通信
注意:信号量、信号、消息队列可以用来同步
答案:
管道通信主要是应用在进程间互发短小、频率很高的消息
共享内存主要是在接进程间共享数据庞大、读写频繁的数据(因为是把物理地址映射到进程)
其他考虑socket。
答案:
僵尸进程:一个进程使用fork出一个子进程,如果子进程退出,但是父进程没有使用 wait或者waitpid函数回收子进程的资源,那么该进程就是僵尸进程。
孤儿进程:是指父进程异常退出,而子进程还没退出,那么子进程就会被1号进程(init)收养。
守护进程:是指后台进程,有意把父进程先结束,然后被1号进程收养。

答案:
僵尸进程的进程号并不会被释放,但是系统的进程号是有限的,如果出现大量僵尸进程就会导致系统无进程号可用就无法产生新进程。
如何杀死僵尸进程:
可以通过杀死其父进程来结束僵尸进程。
答案:
临界区、互斥量、信号量、事件、条件变量、读写锁
临界区:每个线程访问临界资源的那段代码叫临界区,每次只允许一个线程进入临界区,进入后其他线程无法进入。
互斥量:采用互斥对象机制,只有拥有互斥对象的线程才可以访问。
信号量:计数器,允许多个线程同时访问统一资源。
条件变量:通过条件变量通知操作的方式保持多线程同步。
读写锁:读写锁和互斥量类似,但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率就比互斥锁要高。
答案:
用户线程是由用户进行管理,用户线程的创建、调度、同步和销毁全又库函数在用户空间完成,不需要内核的帮助,这种线程开销是比较小的。
内核线程由操作系统创建和销毁。
答案:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/160991.html