线程与进程之间的通讯方式

1.认识线程和进程: 
1.1
什么是线程:线程是系统执行任务调度的最小单位,一个进程可以只包含一个线程此时线程也可以理解为进程,当然也可以拥有多个线程,线程之间可以实现资源共享以及通讯
什么是进程:系统资源分配的最小单位
线程和进程区别:
实际上,进程不是同时运行的,对于一个 CPU 而言,某个时间段只能运行一个程序,也就是只能执行一个进程。操作系统会为每个进程分配一段有限的 CPU 使用时间,CPU 在这段时间内执行某个进程,然后会在下一段时间切换到另一个进程中去执行。为什么会分进程和线程,进程一次切换需要耗费很长的时间,而线程切换一次由于共享内存模式的存在,单个线程都有自己的栈,都会拷贝共享变量到本地栈也就是自己线程的工作区修改完成再放回去实现了多个线程对同一资源的共享以及操作;
1.2通讯:

# 进程通讯方式:
1.pipe:
管道其实是一种半双工模式,数据只能够单项流动,而且只能再有亲缘关系的进程一般指的是父子进程之间使用其次对于namepipe 有名管道是可以实现无亲缘关系的通讯的半双工的;

2.semophore信号量:
信号量是一个计数器,用来控制多个进程对同一资源访问,常作为一种锁机制,进程间表现为防止多个进程同事访问同一资源,在进程内部表现为多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行。

3.msesage queue:
消息队列:
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点
4.signal 信号:
用于通知接收进程某个事件已经发生
5.共享内存shared memory:
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
6.socket:
与其他通信机制不同的是,它可用于不同设备及其间的进程通信。
1.3线程通讯方式:
1.3.1锁机制: 包括互斥锁、条件变量、读写锁 互斥锁提供了以排他方式防止数据结构被并发修改的方法。 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
1.3.2信号量机制(Semaphore): 包括无名线程信号量和命名线程信号量
1.3.3信号机制(Signal):
类似进程间的信号处理线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

原文地址:https://www.cnblogs.com/SunshineKimi/p/11757439.html

时间: 2024-08-29 08:22:18

线程与进程之间的通讯方式的相关文章

线程与进程之间的关系和区别

线程共享的环境包括:进程代码段,进程的公有数据(利用这些数据,线程很容易实现相互间的通讯),进程打开的文件描述符,信号的处理器进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥有自己的个性.有了这些个性,线程才能实现并发性.这些个性包括: 1.线程ID.2.寄存器组的值.3.线程的堆栈(堆栈是保证线程独立运行所必需的).4.错误码的返回值.5.线程的信号屏蔽码(但所有的线程都共享同样的信号处理器).6.线程的优先级 在一个进程的线程共享堆区,而进程中的线程各自维持自己堆栈

进程和线程的定义及区别、线程同步、进程通讯方式总结

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. 进程的概念 进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念. 由 于多道程序系统所带来的复杂环境,程序本身有了并行性[为了充分利用资源,在主存中同时存放多道作业运行,所以各作业之间是并行的].制约性[各程序由于 同时存在于主存中,因此他们之间会存在着相互依赖.相互制约的关系.一个是通过中间媒介--资源发生的间接制约关系,一个是各并行程序间需要相互协同而引 起

进程间的通讯(IPC)方式

为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程).资源共享:多个进程之间共享同样的资源.为了作到这一点,需要内核提供锁和同步机制.进程控制:有些进程希望完全控制另一个进程的执行

IPC进程之间通信的几种方式

概念 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是 共享内存区 .但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件. 除此以外,那就是双方都可以访问的 外设 了.在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息.广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”.因为那些通信手段的效率

DLL与EXE之间的通讯调用 以及 回调函数的线程执行空间

dll 与 exe 之间的通讯方式有很多种, 本文采用回调函数的方法实现, 本文也将研究多线程,多模块的情况下,回调函数所在的线程, 啥也不说了,先附上代码: 下面的是dll模块的的, dll的工程文件: [delphi] view plaincopy library DllAPP; uses windows, SysUtils, Classes, DllClass in 'DllClass.pas'; {$R *.res} var GDllServer: TDllServer; functio

进程之间的通信方式

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件.除此以外,那就是双方都可以访问的外设了.在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息.广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”.因为那些通信手段的效率太低了,而人们对

进程之间通行

[转] 鸣谢http://www.cnblogs.com/xiazh/archive/2012/11/08/2757882.html 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到. 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通

复习线程、进程

1.1.进程和进程之间是独立的,哪怕是父进程和子进程之间也是独立的.包括他们的内存也是独立的. 1.2.线程和线程之间是独立的:这个独立说的是他们的栈是独立的(数据独立). 1.3.线程和进程之间是不独立:线程需要运行进程空间中的代码.进程需要线程来运行代码.二者缺一不可,缺了任何一个他们都会消亡. 1.4.所有的线程会在进程结束时消亡(不应该这样).进程在无任何一个线程运行时消亡(这才是正确的设计). 1.5.线程应该是自然结束的.不然的话会导致内核对象的泄漏. 1.6.某一根线程被强行关闭时

Python 线程(threading) 进程(multiprocessing)

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD