![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux进程线络
班公湖里洗过脚
上马击狂胡,下马草军书
展开
-
进程间通信——Socket
共享内存、管道、信号量、消息队列,他们都是多个进程在一台主机之间的通信,那两个相隔几千里的进程能够进行通信吗?答是必须的,这个时候 Socket 这家伙就派上用场了,例如我们平时通过浏览器发起一个 http 请求,然后服务器给你返回对应的数据,这种就是采用 Socket 的通信方式了。socket编程即网络编程,有着悠久的历史,因此有一个非常固定的编程套路。原创 2016-07-14 20:19:24 · 2051 阅读 · 0 评论 -
进程间通信——管道
我们都知道进程间通信有多种方式,(1.pipe管道,2.mkfifo有名管道,3.消息队列,4.共享内存,5.信号量,6.Socket)那么它们之间的有什么优缺点或者适用于哪种场景呢,本篇开始逐篇学习它们的实现方法。首先我们先来学习管道,看一条linux的语句。netstat -tulnp | grep 8080学过 Linux 命名的估计都懂这条语句的含义,其中”|“是管道的意思,它的作用就是把前一条命令的输出作为后一条命令的输入。在这里就是把 netstat -tulnp 的输出结果作为原创 2016-07-10 19:41:36 · 342 阅读 · 0 评论 -
多进程与多线程的选择
http://blog.chinaunix.net/uid-23770712-id-3013993.html上周去参加答辩,内容是安防系统,然后就想到了我们如何来实现我们的程序,是选择进程还是线程。带着疑惑,查了些资料,总结如下:1、首先要明确进程和线程的含义:进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个转载 2016-08-31 10:44:45 · 279 阅读 · 0 评论 -
线程解析(一)
http://blog.chinaunix.net/uid-23770712-id-3013985.html在使用线程之前我们要知道线程是个怎样的概念,它的作用是什么?在学多进程或多线程编程的时候,有这样一个概念----进程是资源管理的最小单位,线程是程序执行的最小单位,相对于进程,线程上下文切换花费的开销更少。因为线程共享了内存空间,不同线程可以访问同一个变量,即多有线程都可转载 2016-08-31 10:46:55 · 267 阅读 · 0 评论 -
linux上创建线程的类
http://www.oschina.net/code/snippet_2812_62771. [代码][C/C++]代码 ?1234567891011121314151617181920转载 2016-08-31 10:54:37 · 599 阅读 · 0 评论 -
简单Linux C线程池
http://www.cnblogs.com/venow/archive/2012/11/22/2779667.html#3389844大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是转载 2016-08-31 18:00:10 · 272 阅读 · 0 评论 -
进程与线程的一个简单解释
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它转载 2017-09-29 13:27:18 · 190 阅读 · 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 · 540 阅读 · 0 评论 -
用C++和Windows的互斥对象(Mutex)来实现线程同步锁
http://blog.csdn.net/jiangxinyu/article/details/7754573[csharp] view plain copy //这是2个线程模拟卖火车票的小程序 #include #include DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread dat转载 2017-11-03 09:17:41 · 367 阅读 · 0 评论 -
进程间同步互斥经典问题(一)生产者-消费者问题
http://blog.csdn.net/qq_24451605/article/details/49563045问题描述:生产者-消费者问题,也叫做缓存绑定问题(bounded-buffer),是一个多进程同步问题。即有两个进程:制造少和消费者,共享一个固定大小的缓存制造商的工作是制造一段数据,放进缓存,如此重复。消费者一次消费一段数据,从缓存中取出。要保证不让制造商在缓存还是满的时候仍要向内写...转载 2018-02-28 16:54:43 · 2435 阅读 · 0 评论 -
线程同步-生产者消费者问题
http://blog.csdn.net/big_bit/article/details/51356393在进行多线程编程时,难免还要碰到两个问题,那就线程间的互斥与同步:线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某...转载 2018-02-28 16:56:43 · 441 阅读 · 0 评论 -
linux线程池的C语言实现
http://blog.chinaunix.net/uid-20541644-id-1649326.html通常我们使用多线程的方式是,需要时创建一个新的线程,在这个新的线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需要,毕竟我们并不是什么时候都需要创建大量的线程,并在它们执行一个简单的任务后销毁。但是在一些web、email、database等应用转载 2016-08-31 10:41:25 · 373 阅读 · 0 评论 -
线程池
http://blog.chinaunix.net/uid-21289517-id-1828501.html线程池:简单地说,线程池 就是预先创建好一批线程,方便、快速地处理收到的业务。比起传统的到来一个任务,即时创建一个线程来处理,节省了线程的创建和回收的开销,响应更快,效率更高。 在linux中,使用的是posix线程库,首先介绍几个常用的函数:1 线程的创转载 2016-08-31 10:38:03 · 288 阅读 · 0 评论 -
Linux之线程同步篇
http://blog.chinaunix.net/uid-21289517-id-1828478.html进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法得知那个线程会先运行,哪个线程会后运行。下面介绍一些技术,通过他们,你会合理安排你的线程之间对资源的竞争。l 互斥体Mutexl 信号灯Semo转载 2016-08-31 10:35:32 · 420 阅读 · 0 评论 -
linux下线程的创建
linux下线程的创建转载 2015-09-12 10:11:43 · 1806 阅读 · 0 评论 -
简单Linux C线程池
简单Linux C线程池转载 2015-09-14 00:00:30 · 546 阅读 · 1 评论 -
Linux内存点滴:用户进程内存空间
http://blog.jobbole.com/45733/经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, Swa转载 2016-05-28 09:39:04 · 444 阅读 · 0 评论 -
进程间通信——有名管道
上一篇我们学习了无名管道,它的通信方式是单向的,只能把第一个命令的输出作为第二个命令的输入,如果进程之间想要互相通信的话,那么需要创建两个管道。居然有匿名管道,那也意味着有命名管道,下面我们来创建一个命名管道。mkfifo test这条命令创建了一个名字为 test 的命名管道。接下来我们用一个进程向这个管道里面写数据,然后有另外一个进程把里面的数据读出来。echo "this is a pipe" > test // 写数据这个时候管道的内容没有被读出的话,那么这个命令就会一直停在这原创 2016-07-11 11:40:57 · 426 阅读 · 0 评论 -
进程间通信——消息队列
我们知道进程间通信采用管道时,a 进程给 b 进程传输数据,只能等待 b 进程取了数据之后 a 进程才能返回。所以管道不适合频繁通信的进程。那我们能不能把进程的数据放在某个内存之后就马上让进程返回呢?无需等待其他进程来取就返回呢?答是可以的,我们可以用消息队列的通信模式来解决这个问题,例如 a 进程要给 b 进程发送消息,只需要把消息放在对应的消息队列里就行了,b 进程需要的时候再去对应的消息队列里取出来。同理,b 进程要个 a 进程发送消息也是一样。这种通信方式也类似于缓存吧。原创 2016-07-11 11:50:39 · 641 阅读 · 0 评论 -
进程间通信——共享内存
消息队列通信方式有缺点吗?答是有的,如果 a 进程发送的数据占的内存比较大,并且两个进程之间的通信特别频繁的话,消息队列模型就不大适合了。因为 a 发送的数据很大的话,意味发送消息(拷贝)这个过程需要花很多时间来读内存。哪有没有什么解决方案呢?答是有的,共享内存共享内存这个通信方式就可以很好着解决拷贝所消耗的时间了。这个可能有人会问了,每个进程不是有自己的独立内存吗?两个进程怎么就可以共享一块内存了?我们都知道,系统加载一个进程的时候,分配给进程的内存并不是实际物理内存,而是虚拟内存空间。原创 2016-07-11 13:40:17 · 2738 阅读 · 1 评论 -
进程间通信——信号量
共享内存最大的问题是什么?没错,就是多进程竞争内存的问题,就像类似于我们平时说的线程安全问题。如何解决这个问题?这个时候我们的信号量就上场了。信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。例如信号量的初始值是 1,然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0,然后进程b 也要来访问内存1的时候,看到信号量的值为 0 就知道已经有进程在访问内存1了,这个时候进程 b 就会访问不了内存1。所以说,信号量也是进程之间的一种通信方式。原创 2016-07-11 13:43:06 · 493 阅读 · 0 评论 -
Linux 的多线程编程的高效开发经验
本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对比 Linux 特性,以加深读者印象。转载 2016-08-31 10:28:55 · 564 阅读 · 0 评论 -
多线程编程
http://blog.chinaunix.net/uid-26833883-id-3224261.html一、线程的基本概念 进程(process)和文件(files)是unix/linux操作系统两个最基本的抽象。进程是处于执行期的程序和它所包含的资源的总和,也就是说一个进程就是处于执行期的程序。一个线程(thread)就是运行在一个进程上下文中的一个逻辑流,不难看出,线转载 2016-08-31 10:31:35 · 295 阅读 · 0 评论 -
线程池的概念及Linux 怎么设计一个简单的线程池
http://blog.chinaunix.net/uid-26983585-id-3336491.html今天看到一篇hao文章,现在跟大家分享一下,但是必须得自己去学会实践!什么是线程池?简单点说,线程池就是有一堆已经创建好了的线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候,就从这个池子里面取一个空闲等 待的线程来处理该任务,当处理完成了就再次把该转载 2016-08-31 10:33:36 · 264 阅读 · 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 · 987 阅读 · 0 评论