Linux进程、线程间通讯、同步
国境之南Fantasy
Coder
展开
-
本地socket unix domain socket
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进转载 2014-01-03 17:18:30 · 873 阅读 · 0 评论 -
select 实现分析
select源码结构图: 源码分析: #undef __NFDBITS#define __NFDBITS (8 * sizeof(unsigned long)) #undef __FD_SETSIZE#define __FD_SETSIZE 1024 #undef __FDSET_LONGS#defin转载 2017-02-28 21:37:44 · 938 阅读 · 0 评论 -
pthreads : pthread_cond_signal() from within critical section
pthreads : pthread_cond_signal() from within critical sectionup vote14down votefavorite8I have the following piece of code in thread A, which blocks using pthre转载 2016-10-29 20:22:29 · 492 阅读 · 0 评论 -
Cache一致性协议之MESI
Cache一致性协议之MESI 处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器转载 2016-11-07 15:20:06 · 676 阅读 · 0 评论 -
Linux的原子操作与同步机制
并发问题现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++;”在未经编译器优化时生成的汇编代码为。当操作系统内存在多个进程同时执行这段代码时,就可能带来并发问题。假设count变量初始值为0。进程1执行完“mov eax, [count]”后,寄存器eax内保存了count的值0。此时,进程转载 2016-11-06 20:06:22 · 391 阅读 · 0 评论 -
孤儿进程与僵尸进程
1、前言 《unix环境高级编程》第八章进程提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进转载 2016-10-23 14:24:30 · 373 阅读 · 0 评论 -
多线程情况下,主线程先退出,子线程会被强制退出吗
1、进程中线程之间的关系线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(...))。main执行完之后, 会调用exit()。exit() 会让整个进程over终止,那所有线程自然都会退出。2、主线程先退出,子线程转载 2016-07-08 21:37:20 · 30651 阅读 · 0 评论 -
RabbitMQ基础概念详细介绍
本文对rabbitmq基础介绍,完全是为了下一篇rabbitmq性能测试做准备,让读者去了解我们需要测试的是什么样一个“东西”。引言你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。消息服务擅长于解决多系统、异构系统间的数据交换(消息通知转载 2016-06-27 11:49:32 · 322 阅读 · 0 评论 -
Linux 进程间通信 - 信号灯(Semaphores)
一般意义下,信号灯是一个具有整数值的对象,它支持两种操作P()和V()。P()操作减少信号灯的值,如果新的信号灯的值小于0,则操作阻塞;V()操作增加信号灯的值,如果结果值大于或等于0,则唤醒一个等待的进程。通常用信号灯来做进程的同步和互斥。最简单形式的信号灯就是内存中一个存储位置,它的取值可以由多个进程检验和设置。至少对于相关的进程来讲,对信号灯的检验和设置操作是不可中断的或者说是原子的转载 2014-06-10 15:14:45 · 3153 阅读 · 0 评论 -
自旋锁
自旋锁 本来就只是一个很简单的同步机制,在SMP之前根本就没这个东西,一切都是Event之类的同步机制,这类同步机制都有一个共性就是 一旦资源被占用都会产生任务切换,任务切换涉及很多东西的(保存原来的上下文,按调度算法选择新的任务,恢复新任务的上下文,还有就是要修改cr3寄存器会导致cache失效)这些都是需要大量时间的,因此用Event之类来同步一旦涉及到阻塞代价是十分昂贵的比如 我用一个E转载 2014-06-25 13:57:15 · 708 阅读 · 0 评论 -
进程间的通信(互斥锁、条件变量、读写锁、文件锁、信号灯)
为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作。比如在 共享内存的通信方式中,两个或者多个进程都要对共享的内存进行数据写入,那么怎么才能保证一个进程在写入的过程中不被其它的进程打断,保证数据的完整性 呢?又怎么保证读取进程在读取数据的过程中数据不会变动,保证读取出的数据是完整有效的呢? 常用的同步转载 2014-03-13 16:46:12 · 1183 阅读 · 0 评论 -
多进程使用pthread mutex
pthread的mutex通常用在多线程的同步当中,至于多进程的同步,一直以为只能使用记录锁和信号量,而这两种机制都需要内核的支持,属于“重量级”部件。也曾经在多进程同步中使用pthread mutex,但前提有两个:mutex能为多个进程所见,使mutex对象驻留在共享内存中;mutex本身不额外使用进程本地的内存,如堆内存。第一个前提容易满足,对于第二个,GCC的pthread实现也满足。但我转载 2014-03-13 17:02:00 · 2883 阅读 · 3 评论 -
进程间通信--信号量
from:http://hi.baidu.com/monalisa88188/item/3f04911f5ddfd35df0090e5d 一、信号量的基本概念 信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源访问的同步。临界资源可以简单地理解为在某一时刻只能由一个进程或线程进行操作的资源,这里的资源可以是一段代码、一个变量转载 2012-10-12 11:04:14 · 1147 阅读 · 0 评论 -
进程间同步之--信号量
信号量分有名和无名信号量。它们的区别和管道及命名管道的区别类似。有名信号量要求创建一个文件,而无名信号量则直接保存在内存中。一,Posix信号量Posix信号量接口总结(见下图):上面一行是有名信号量,可于fifo相类比,其值保存在文件中,可用于进程和线程同步;下面一行是无名信号量,可与pipe相类比,其值保存在内存中,可用于进程和线程同步;中间部分,是两者的公用接口。转载 2012-10-12 11:10:53 · 695 阅读 · 0 评论 -
临界区,互斥量,信号量,事件的区别(Windows)
临界区,互斥量,信号量,事件的区别四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开转载 2012-10-26 13:44:13 · 1752 阅读 · 0 评论 -
Linux操作系统多线程信号总结
linux 多线程信号编程总结linux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞此信号,直到信号处理函数返回。其他转载 2012-12-13 14:31:34 · 677 阅读 · 0 评论 -
进程间学习小结(消息队列)
IPC随进程持续、随内核持续以及随文件系统持续的定义:1. 随进程持续:IPC一直存在到打开IPC对象的最后一个进程关闭该对象为止。如管道和有名管道;2. 随内核持续:IPC一直持续到内核重新自举(即重启)或者显示删除该对象为止。如消息队列、信号灯以及共享内存等;3. 随文件系统持续:IPC一直持续到显示删除该对象为止。信号这种通信方式更像"即时"的通信方式,它要求接受转载 2013-12-26 09:59:22 · 801 阅读 · 0 评论 -
关于unix domain socket的一个文章
原文地址 http://www.thomasstover.com/uds.htmlUnix Domain Socket揭密初稿于2006 二月最后更新于11月11日, 2011★"Unix Domain Sockets? - 我以前听说过"★经常被忽略的Unix domain socket机制是现代Unix最强特性之一。大多数Unix套接字编程书籍只是从学术上讨论这个话题,甚至转载 2014-01-03 21:34:31 · 6749 阅读 · 0 评论 -
Priority Inversion - 优先级翻转
英文: Priority Inversion 中文: 优先级翻转、优先级倒置、优先级逆转 介绍: 即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。什么是优先级反转简单从字面上来说,就是==低优先级的任务先于高优转载 2017-03-28 21:31:08 · 837 阅读 · 0 评论