
Linux进程线络
班公湖里洗过脚
上马击狂胡,下马草军书
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
进程间通信——Socket
共享内存、管道、信号量、消息队列,他们都是多个进程在一台主机之间的通信,那两个相隔几千里的进程能够进行通信吗?答是必须的,这个时候 Socket 这家伙就派上用场了,例如我们平时通过浏览器发起一个 http 请求,然后服务器给你返回对应的数据,这种就是采用 Socket 的通信方式了。socket编程即网络编程,有着悠久的历史,因此有一个非常固定的编程套路。原创 2016-07-14 20:19:24 · 2154 阅读 · 0 评论 -
进程间通信——管道
我们都知道进程间通信有多种方式,(1.pipe管道,2.mkfifo有名管道,3.消息队列,4.共享内存,5.信号量,6.Socket)那么它们之间的有什么优缺点或者适用于哪种场景呢,本篇开始逐篇学习它们的实现方法。首先我们先来学习管道,看一条linux的语句。netstat -tulnp | grep 8080学过 Linux 命名的估计都懂这条语句的含义,其中”|“是管道的意思,它的作用就是把前一条命令的输出作为后一条命令的输入。在这里就是把 netstat -tulnp 的输出结果作为原创 2016-07-10 19:41:36 · 369 阅读 · 0 评论 -
互斥锁 pthread_mutex_init()函数
http://blog.csdn.net/yasi_xi/article/details/19112077linux下为了多线程同步,通常用到锁的概念。posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。即对象互转载 2017-11-10 13:42:40 · 565 阅读 · 0 评论 -
进程间同步互斥经典问题(一)生产者-消费者问题
http://blog.csdn.net/qq_24451605/article/details/49563045问题描述:生产者-消费者问题,也叫做缓存绑定问题(bounded-buffer),是一个多进程同步问题。即有两个进程:制造少和消费者,共享一个固定大小的缓存制造商的工作是制造一段数据,放进缓存,如此重复。消费者一次消费一段数据,从缓存中取出。要保证不让制造商在缓存还是满的时候仍要向内写...转载 2018-02-28 16:54:43 · 2473 阅读 · 0 评论 -
线程同步-生产者消费者问题
http://blog.csdn.net/big_bit/article/details/51356393在进行多线程编程时,难免还要碰到两个问题,那就线程间的互斥与同步:线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某...转载 2018-02-28 16:56:43 · 480 阅读 · 0 评论 -
linux下线程的创建
linux下线程的创建转载 2015-09-12 10:11:43 · 1846 阅读 · 0 评论 -
进程间通信——有名管道
上一篇我们学习了无名管道,它的通信方式是单向的,只能把第一个命令的输出作为第二个命令的输入,如果进程之间想要互相通信的话,那么需要创建两个管道。居然有匿名管道,那也意味着有命名管道,下面我们来创建一个命名管道。mkfifo test这条命令创建了一个名字为 test 的命名管道。接下来我们用一个进程向这个管道里面写数据,然后有另外一个进程把里面的数据读出来。echo "this is a pipe" > test // 写数据这个时候管道的内容没有被读出的话,那么这个命令就会一直停在这原创 2016-07-11 11:40:57 · 446 阅读 · 0 评论 -
进程间通信——消息队列
我们知道进程间通信采用管道时,a 进程给 b 进程传输数据,只能等待 b 进程取了数据之后 a 进程才能返回。所以管道不适合频繁通信的进程。那我们能不能把进程的数据放在某个内存之后就马上让进程返回呢?无需等待其他进程来取就返回呢?答是可以的,我们可以用消息队列的通信模式来解决这个问题,例如 a 进程要给 b 进程发送消息,只需要把消息放在对应的消息队列里就行了,b 进程需要的时候再去对应的消息队列里取出来。同理,b 进程要个 a 进程发送消息也是一样。这种通信方式也类似于缓存吧。原创 2016-07-11 11:50:39 · 678 阅读 · 0 评论 -
进程间通信——共享内存
消息队列通信方式有缺点吗?答是有的,如果 a 进程发送的数据占的内存比较大,并且两个进程之间的通信特别频繁的话,消息队列模型就不大适合了。因为 a 发送的数据很大的话,意味发送消息(拷贝)这个过程需要花很多时间来读内存。哪有没有什么解决方案呢?答是有的,共享内存共享内存这个通信方式就可以很好着解决拷贝所消耗的时间了。这个可能有人会问了,每个进程不是有自己的独立内存吗?两个进程怎么就可以共享一块内存了?我们都知道,系统加载一个进程的时候,分配给进程的内存并不是实际物理内存,而是虚拟内存空间。原创 2016-07-11 13:40:17 · 2788 阅读 · 1 评论 -
进程间通信——信号量
共享内存最大的问题是什么?没错,就是多进程竞争内存的问题,就像类似于我们平时说的线程安全问题。如何解决这个问题?这个时候我们的信号量就上场了。信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。例如信号量的初始值是 1,然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0,然后进程b 也要来访问内存1的时候,看到信号量的值为 0 就知道已经有进程在访问内存1了,这个时候进程 b 就会访问不了内存1。所以说,信号量也是进程之间的一种通信方式。原创 2016-07-11 13:43:06 · 544 阅读 · 0 评论 -
Linux 的多线程编程的高效开发经验
本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对比 Linux 特性,以加深读者印象。转载 2016-08-31 10:28:55 · 593 阅读 · 0 评论 -
【IPC通信】key_t键和ftok函数
System V IPC分为三种:System V消息队列System V信号量System V共享内存区这三种类型的IPC使用key_t值做为它们的名字。key_t这个数据类型在有定义,通常是一个至少32位的整数。 我们通常使用ftok()函数(可以如此记忆:file to key)把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键。(当然,我们也可以不用f转载 2013-10-12 11:02:07 · 1055 阅读 · 0 评论