首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

服务器线程并发进程并发

进程线程使用在前面博文已经讲述完毕,在完成一个最简单服务器之后,就是要考虑下如何实现并发服务器了。 要实现服务并发,只能通过进程线程两种方式。...之前提到过listen_fdconnect_fd,listen用于监听是否有客户端连接,维护两个fd队列,没完成握手完成就绪。...在实际并发服务器应用场合,在IO层大多通过两个地方来提高代码效率,一个是描述符处理,一个是线程/进程调度处理。 下图简单描述了并发服务器原理: ?...在处理IO时,会用到IO复用技术提高效率,在线程/进程分配时,会先构造线程池或进程池,并以某种方式调度,这些在后续博文详细描述。 下面是并发实现简单代码,利用线程进程实现服务器并发。...线程并发进程并发各有优劣,目前大多服务器还是用线程进行并发进程要对父进程进行拷贝,资源消耗大,但相互直接资源互不影响,线程效率高但是要注意锁使用,一个线程可能会影响整个服务器运行。

2.9K70

Nginx服务器进程

Nginx服务器进程有3类:主进程、工作进程、缓存进程 (1)主进程 Nginx启动时运行主要进程,主要功能是与外界通信对内部其他进程进行管理 主要工作内容 1)读取配置文件,验证有效性正确性...2)建立、绑定、关闭 socket 3)按照配置生成、管理、结束工作进程 4)接收指令,如 重启、升级、退出 5)不中断服务,平滑重启、升级,升级失败回滚处理 6)开启日志文件,获取文件描述符 (2)...工作进程 由主进程生成,生成数量由配置文件指定,工作进程生存于主进程整个生命周期 主要工作内容 1)接收请求 2)将请求依次送入各个功能模块进行过滤处理 3)IO调用,获取响应数据 4)与后端服务器通信...,接收后端服务器处理结果 5)数据缓存,访问缓存索引、查询、调用缓存数据 6)发送请求结果 7)接收主进程指令,如 重启、升级、退出 (3)缓存进程 缓存进程有两类 1)缓存索引重建进程 nginx启动后由主进程生成...,在缓存元数据重建完成后就自动退出 该进程启动后,对缓存文件目录结构扫描,在内存中建立索引元数据库 2)缓存索引管理进程 生存于主进程整个生命周期 负责在索引元数据更新完成后,对元数据是否过期进行判断

4.4K40
您找到你想要的搜索结果了吗?
是的
没有找到

进程服务器

一、思路 先与客户端建立好连接, 每次监听到一个客户端之后,都需要产生一个子进程去处理这个连接,然后父进程继续去等待监听,唯一一个要注意点就是要使用信号来监听子进程是否结束,从而对其进行回收,防止僵尸进程产生...&opt, sizeof(opt)); (3)bind函数 bind(lfd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));b这个函数主要目的就是将服务器地址结构绑定到套接字...lfd上,所以开始要设置服务器ser_addr:ser_addr.sin_family = AF_INET, ser_addr.sin_port = htons(8888);ser_addr.sin_addr.s_addr...= htonl(INADDR_ANY);端口8888是可由自己设置,, (3)listen函数 设置监听上限函数,,并不是阻塞监听函数listen(lfd, 128); (4)accept函数...cfd; 2、创建子进程 监听到了客户端后,就要开始创建子进程来对这个监听进行处理;pid = fork() 3、子进程处理通信 因为子进程不需要监听连接,使用可以close(lfd);之后便可以进行通信处理

4.7K20

【Linux】进程排队理解&&进程状态表述&&僵尸进程孤儿进程理解

一、进程排队理解  进程不是一直运行进程可能会在等待某种软硬件资源。即使把进程加载到CPU中,也不是一直会运行。...也就是说,进程排队不是我们简单地理解进程PCB去排队,而是PCB内部各个结构体通过prev指针next指针连接起各个进程去排队,从而可以让进程在不同队列中进行排队。如下图所示。...,操作系统就会将该进程PCB从CPU运行队列中移除,将表示进程状态整形变量设置为block,再将该进程PCB链入到键盘结构体等待队列中。...当键盘读到了用户输入数据,操作系统再将该进程PCB从键盘等待队列中移除,链入到CPU运行队列中,再改变表示进程状态整形变量,从而实现了进程状态切换。...那是因为以前我们创建进程进程都是bash,bash一瞬间会自动读取子进程退出状态,不需要我们手动读取。而我们自己创建进程需要我们自己读取它退出状态。

13310

孤儿进程僵尸进程

linux基础 僵尸进程进程exit()退出之后,他进程没有通过wait()系统调用回收他进程描述符信息,该进程会继续停留在系统进程表中,占用内核资源,这样进程就是僵尸进程。...#include #include int main () { /*fpid表示fork函数返回值,fork会返回两次, 一次是父进程,返回值是子进程...作为一个进程,需要找到一个父进程,否则这种进程在退出之后没人回收他进程描述符,空耗内存。此时该进程会找到一个父进程,如果自己所在进程组没人收养,那就作为init进程进程。...finally..."); } } 处置方式 孤儿进程会由init进程收养作为子进程,所以不会有什么危害;僵尸进程会占用进程号,以及未回收文件描述符占用空间,如果产生大量僵尸进程,将会导致系统无法分配进程号...,说明父进程代码编写有问题。

1K10

孤儿进程僵尸进程

基本概念: 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建,子进程在创建新进程。子进程结束进程运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。...当一个 进程完成它工作终止之后,它进程需要调用wait()或者waitpid()系统调用取得子进程终止状态。   ...但这样就导致了问题,如果进程不调用wait / waitpid的话, 那么保留那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用进程号是有限,如果大量产生僵死进程,将因为没有可用进程号而导致系统不能产生新进程...每当出现一个孤儿进程时候,内核就把孤 儿进程进程设置为init,而init进程会循环地wait()它已经退出进程。...僵尸进程危害场景:   例如有个进程,它定期产 生一个子进程,这个子进程需要做事情很少,做完它该做事情之后就退出了,因此这个子进程生命周期很短,但是,父进程只管生成新进程,至于子进程 退出之后事情

1.6K30

Linux进程调度_linux进程查看调度

I/O 消耗型 CPU 消耗型 ---- 运行进程如果大部分来进行 I/O 请求或者等待的话,这个进程称之为 I/O 消耗型,比如键盘。...其中 Real_time Fair 是最最常用,下面主要聊聊着两类。...进程切换分为自愿切换(Voluntary)强制切换(Involuntary),以上场景1属于自愿切换,场景23属于强制切换。...自愿切换发生时候,进程不再处于运行状态,比如由于等待IO而阻塞(TASK_UNINTERRUPTIBLE),或者因等待资源特定事件而休眠(TASK_INTERRUPTIBLE),又或者被debug/...进程自愿切换(Voluntary)强制切换(Involuntary)次数被统计在 /proc//status 中,其中voluntary_ctxt_switches表示自愿切换次数,nonvoluntary_ctxt_switches

20.5K10

进程线程区别

进程是资源分配最小单位,线程是CPU调度最小单位 进程线程区别 线程不能看做独立应用,而进程可看做独立应用 进程有独立地址空间,相互不影响,线程只是进程不同执行路径 线程没有独立地址空间多进程程序比多线程程序健壮...进程切换比线程切换开销大 java进程线程关系 Java对操作系统提供功能进行封装,包括进程线程 运行一个程序会产生一个进程进程包含至少一个线程 每个java进程对应一个JVM实例(每个JVM...实例对应一个堆),多个线程(每个线程有自- 己私有的栈)共享JVM里堆 Java采用单线程编程模型,程序会自动创建主线程 主线程可以创建子线程,原则上要后于子线程完成执行

62020

进程执行挂起

1 进程总览 进程是对逻辑抽象,我们从操作系统书籍中对进程有了很多认识,但是对进程实现可能不太了解,这篇文章尝试解释一下关于进程实现大致原理。...进程实现,其实和我们平时写代码时候一样,比如我们要表示一个东西,我们会定义一个数据结构。进程也不例外。所以进程本质就是一个数据结构,他保存了一系列数据。...操作系统以数组或者链表形式全部进程管理起来。进程可以说分为两种 1 系统初始化时第一个进程, 2 除了第一个进程其他进程,他们都是由fork或者fork+execute系统调用创建出来。...用线性地址首地址加上ip中偏移,得到线性地址,然后再通过页目录页表得到物理地址,物理地址还没有分配则进行缺页异常等处理。 3 进程挂起唤醒 进程挂起、阻塞、多进程。...进程被挂起(分为可被信号唤醒不能被信号唤醒两种)唤醒实现。

1.7K10

Windows内核之进程终止进程

1 进程终止方法: 主线程进入点函数返回(最好使用这种方法) 进程一个线程调用ExitProcesss函数(应该避免使用这样方法)。...,进程也会终止了,可是它不会告诉进程内相关联DLL这个进程将要被终止。...它做事情: 全部打开句柄被关闭 全部线程会被终止 进程对象状态变为终止,满足全部等待进程结束线程 进程中全部线程对象状态变为终止,满足全部等待线程结束线程 ...进程终止状态由STILL_ACTIVE变为了进程返回代码 这个函数是异步,它告诉操作系统,你要终止某个进程,可是当函数返回时候,你无法保证进程是否已经被杀死,假设想要确切知道进程是否被杀死...2 进程终止时情况 进程中全部剩余线程将被终止 进程中指定用户对象,GDI对象被释放,内核对象被关闭 内核对象状态编程收到通知状态 进程退出代码由STILL_ACTIVE

1.7K20

进程线程概述

进程线程概述 ============================================================================= 1:要想了解多线程,必须先了解线程...而通过观察,我们发现只有运行程序才会出现进程进程:就是正在运行程序。 进程:是系统进行资源分配调用独立单位。每一个进程都有它自己内存空间系统资源。...-------------------------------------- 3:多进程有什么意义呢? 单进程计算机只能做一件事情,而我们现在计算机都可以做多件事情。...举例:一边玩游戏(游戏进程),一边听音乐(音乐进程)。 也就是说现在计算机都是支持多进程,可以在一个时间段内执行多个程序。 可以提高CPU使用率。...多个进程是在抢这个资源,而其中某一个进程如果执行路径(线程)比较多,那么就会有更高几率抢到CPU执行权。

44510

线程进程区别

#定义 线程:CPU 进行调度基本单位----内存共享 进程:系统内存分配基本单位------一个进程里面可以有多个线程 #区别 根本区别:进程是操作系统资源分配基本单位,而线程是任务调度执行基本单位...在开销方面:每个进程都有独立代码和数据空间(程序上下文),程序之间切换会有较大开销;线程可以看做轻量级进程,同一类线程共享代码和数据空间,每个线程都有自己独立运行栈程序计数器(PC),线程之间切换开销小...所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行) 内存分配方面:系统在运行时候会为每个进程分配不同内存空间...;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用资源来自其所属进程资源),线程组之间只能共享资源。...包含关系:进程是线程容器,不存在没有线程进程,如果一个进程内有多个线程,则执行过程不是一条线,而是多条线(线程)共同完成;线程是进程一部分,所以线程也被称为轻权进程或者轻量级进程

83500

进程线程对比

问题 一 进程线程对比 二 为什么进程切换开销大,线程切换开销低呢?...一 进程线程对比 几个方面对比: 根本区别:进程是操作系统资源分配基本单位,而线程是任务调度执行基本单位 开销方面:每个进程都有独立代码和数据空间(程序上下文),程序之间切换会有较大开销...;线程可以看做轻量级进程,同一类线程共享代码和数据空间,每个线程都有自己独立运行栈程序计数器(PC),线程之间切换开销小。...每个进程都有自己虚拟地址空间,进程所有线程共享进程虚拟地址空间。...ps: 如果大家需要了解一下进程,线程状态转换,信息保存 这里大家要熟悉一下PCB进程控制块以及寄存器计数器

80231

进程同步互斥

这样,进程在临界区执行期间,计算机系统不响应中断,从而不会引发调度,也就不会发生进程或线程切换。由此,保证了对锁测试关锁操作连续性完整性,有效地保证了互斥。...在有些应用场合,是一个进程往往需要获得两个或更多共享资源后方能执行其任务。假定现有两个进程AB,它们都要求访问共享数据DE,当然,共享数据都应作为临界资源。...信号量应用 利用信号量实现进程互斥 为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问该资源临界区CS置于wait(mutex)signal...利用信号量实现前趋关系  可利用信号量来描述程序或语句之间前趋关系。设有两个并发执行进程P1P2。P1中有语 句S1;P2中有语句S2。我们希望在S1执行后再执行S2。...为实现这种前趋关系,只需使进程P1P2共享一个公用信号量S,并赋予其初值为0,将signal(S)操作放在语句S1后面,而在S2语句前面插入wait(S)操作,即 在进程P1中,用S1;signal

21120

【Linux】进程状态&&僵尸进程孤儿进程&&阻塞、挂起运行

进程自己醒来;2. 重启–断点 3. 僵尸进程孤儿进程 3.1 僵尸进程 Linux中一个进程退出,它会将自己退出信息保留在自己PCB中。...因为直接在命令行中启动进程,它进程是bash,bash会自动回收新进程Z。 4. 进程阻塞、挂起运行 在网上找一张进程状态图: 终止状态就等价于Z状态X状态。...阻塞运行状态变化,往往伴随进程PCB被连入到不同队列中。...CPU内部所有寄存器中临时数据,叫做进程上下文。 进程在切换,最重要一件事就是:上下文数据保护恢复。...CPU内寄存器:寄存器本身是硬件,具有数据存储能力,CPU寄存器硬件只有一套。 CPU内部数据,可以有多套,有几个进程,就有几套进程对应上下文数据。 所以寄存器!

29110

进程线程区别

进程线程区别 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程划分尺度小于进程,使得多线程程序并发性高。...从逻辑角度来看,多线程意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立应用,来实现进程调度管理以及资源分配。这就是进程线程重要区别。...进程是具有一定独立功能程序关于某个数据集合上一次运行活动,进程是系统进行资源分配调度一个独立单位....线程是进程一个实体,是CPU调度分派基本单位,它是比进程更小能独立运行基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少资源(如程序计数器,一组寄存器栈),但是它可与同属一个进程其他线程共享进程所拥有的全部资源...该模型普遍认为太过危险,原因在于线程间切换不发生风险太大。如我们在4.2.8节中所解释那样,该机制会在内部使用以提升某些服务器性能,例如SQL Server2005。

1.4K50

进程描述创建

因为wake_up_new_task函数里会执行下列操作:如果子进程进程运行在同一个CPU上,而且父进程进程不能共享同一组页表,那么,就把子进程插入父进程运行队列,插入时让子进程在父进程前面执行...do_fork通过copy_process函数来创建进程描述符进程执行所需要所有其他内核数据结构。 copy_process函数 检查参数clone_flags所传递标志一致性。...字段 初始化子进程描述符中list_head数据结构自旋锁,并为与挂起信号、定时器及时间统计表相关几个字段赋初值 调用copy_semundo(),copy_files(),copy_fs(),copy_sighand...(),copy_signal(),copy_mm()copy_namespace()来创建新数据结构,并把父进程相应数据结构值复制到新数据结构中。...将eax寄存器置0,子进程返回值为0 将ret_from_fork()地址存放在thread.eip字段 dup_task_struct函数 dup_task_struct 根据父进程创建子进程内核栈进程描述符

86930
领券