- 线程与进程的差别:
- 地址空间和其它资源:进程间相互独立,同一进程间各线程共享。某进程内的线程对其它进程不可见
- 通信:进程间通信IPC,线程间可以读写进程的数据段来进行通信----需要进程同步和互斥手段的辅助,以保证数据的一致性。
- 调度和切换:线程的调度和上下文切换比较快
- 进程间是相互独立的,这表现在内存空间,上下文;线程运行在进程的空间内;
- 同一进程中的两段代码不能够同时进行,除非引入线程;
- 线程是属于进程的,当进程退出的时该进程所产生的线程都会强制退出并清楚,线程占用的资源要少于进程所占用的资源。
- 进程和线程可以有优先级。
- 进程间可以通过IPC通信,但线程不可以。
- 进程是资源分配的最小单位,线程是独立调度和执行的基本单位。
- 一个程序至少有一个进程,一个进程至少有一个线程.
- 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
- 在linux操作系统中,线程是在内核外实现的,进程实在内核中实现的。
- 进程
- 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
- 进程是程序的一次执行。
- 进程间是相互独立的,这表现在内存空间,上下文;
- 进程间主要的通信方式有:管道,有名管道、消息队列、信号量、共享内存;除此之外还有信号和套接字;
- 1 管道(pipe)管道是一种半双工的通信方式,数据只能单方向流动;而且只能在具有亲缘关系的进程间使用;
- 2 有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间进行通信;
- 3 信号量(semophone): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,因此主要作为进程间通信以及同一进程内不同线程之间的同步手段;
- 4 消息队列(message queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息量少、管道只能承载无格式字节流以及缓冲区大小受限的缺点;
- 5 信号:signal 信号是一种比较复杂的通信方式,用于通知接收进程某个时间已经发生、
- 6 共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建但是多个进程可以访问。共享内存是最快的IPC通信方式,它是针对其它进程通信运行效率低专门设计的。它往往与其它通信机制,如信号量,配合使用,来实现进程间的同步与通信;
- 7 套接字:socket 套接口也是一种进程间通信机制,与其它通信机制不同的的是,它可用于不同机器间的进程通信;
- IPC 是进程间通信 Internet process connection 编程技术;
- 线程
- 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
- 线程运行在进程空间内;
- 线程同步中,最常用的有互斥锁:条件变量和异步信号;
- 1 互斥锁通过锁机制来实现线程间的同步。在同一时刻它通常允许一个线程执行一个关键部分的代码;
- 2 条件变量是利用线程间共享的全局变量进行同步的一种机制。条件变量宏观上和类似if语句;符合条件就能执行某段程序,否则只能等待条件成立;使用条件变量包括两个动作:一个等待使用资源资源的线程等待“条件变量设置为真”;另一个线程在使用完资源后“设置条件为真”,这样就可以保证线程间的同步了;这样就存在一个关键问题,就是要保证套件变量能被正确的修改,条件变量要受到特殊的保护,实际使用中互斥锁扮演着这样的角色;
- 3 线程同进程一样也可以接收和处理信号,信号也是线程间同步的俄译中手段;
- 进程与线程的通信方法总结 (1) 进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等
(2) 事件、临界区、互斥量、信号量可以实现线程同步
转载于:https://www.cnblogs.com/widic/p/7384276.html