系统编程
文章平均质量分 90
阳光丿洒脱
死亡不是终点,遗忘才是。
展开
-
线程池的实现
什么是线程池一种线程的使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。什么地方可以用到线程池任务短,但数量大,例如:网页请求这样的任务,使用线程池非常合适对性能要求苛刻,要求服务器迅速响应客户请求接受突发性的大...原创 2020-02-27 12:52:24 · 286 阅读 · 0 评论 -
Linu系统编程---10(Linux的终端,线路规程,网络终端,进程组)
终端输入输出设备的总称在 UNIX 系统中,用户通过终端登录系统后得到一个 Shell 进程,这个终端成为 Shell 进程的控制终端(Controlling Terminal),进程中,控制终端是保存在 PCB 中的信息,而 fork 会复制 PCB 中的信息,因此由 Shell 进程启动的其它 进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输...原创 2019-08-28 18:00:16 · 180 阅读 · 0 评论 -
Linux系统编程---11(会话,守护进程,创建守护进程)
会话创建会话创建一个会话需要注意以下6点注意事项调用进程不能是进程组组长,该进程变成新会话首进程该进程成为一个新进程组的组长进程需要root权限(nbuntu不需要)新会话丢弃原有的控制终端,该会话没有控制终端该调用进程是组长进程,则出错返回建立新会话时,先调用fork,父进程终止,子进程调用setsidgetsid 函数获取进程所属的会话IDpid_t getsid(p...原创 2019-08-28 20:13:21 · 224 阅读 · 0 评论 -
Linux系统编程----12(线程概念,Linux线程实现原理,栈中ebp指针和ebp指针,线程的优缺点和共享资源)
线程概念LWP:light weight process 轻量级进程进程:独立地址空间,拥有 PCB线程:也有 PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。独居(进程);合租(线程)。Linux 下:线程:最小的执行单位进程:最小分配资源单位,可看成是只有一个线程的进程。一个进程创建多少个线程,他们都共用一块地址空间,但是线程越多,占用cpu越多,也就是...原创 2019-08-29 21:54:31 · 482 阅读 · 1 评论 -
Linux系统编程---13(线程控制函数,创建线程,循环创建多个线程,线程间共享全局变量)
线程控制函数pthread_self 函数获取线程 ID。其作用对应进程中 getpid() 函数。pthread_t pthread_self(void); 返回值:成功:0; 失败:无!线程 ID:pthread_t 类型,本质:在 Linux 下为无符号整数(%lu),其他系统中可能是结构体实现线程 ID 是进程内部,识别标志。(两个进程间,线程 ID 允许相同)注意:不应使用...原创 2019-09-01 11:04:30 · 767 阅读 · 0 评论 -
Linux系统编程---14(回收子线程,回收多个子线程,线程分离,杀死线程)
回收子线程pthread_join 函数阻塞等待线程退出,获取线程退出状态 其作用,对应进程中 waitpid() 函数。int pthread_join (pthread_t thread,void** retval); 成功:0,失败:错误号参数:thread:线程ID(注意 :不是指针);retval:存储线程结束状态对比记忆:进程中:main 返回值、exit 参数–&...原创 2019-09-03 17:25:31 · 1689 阅读 · 1 评论 -
Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)
对比进程 线程fork pthread_createexit (10) pthread_exit (void *)wait (int *) pthread_join (,void **)阻塞kill pthread_cancel ();必须到取消点(检查点):系统调用 man 7 pthreadsgetpid pthread_self ...原创 2019-09-03 20:18:24 · 293 阅读 · 0 评论 -
Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)
同步概念所谓同步,即同时起步,协调一致。不同的对象,对“同步”的理解方式略有不同。如,设备同步,是指在两 个设备之间规定一个共同的时间参考;数据库同步,是指让两个或多个数据库内容保持一致,或者按需要部分保持 一致;文件同步,是指让两个或多个文件夹里的文件保持一致。等等而,编程中、通信中所说的同步与生活中大家印象中的同步概念略有差异。“同”字应是指协同、协助、互相 配合。主旨在协同步调,按预定的...原创 2019-09-05 20:43:57 · 390 阅读 · 0 评论 -
Linux系统编程---17(条件变量及其函数,生产者消费者条件变量模型,生产者与消费者模型(线程安全队列),条件变量优点,信号量及其主要函数,信号量与条件变量的区别,)
条件变量条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。主要应用函数:pthread_cond_init 函数pthread_cond_destroy 函数pthread_cond_wait 函数pthread_cond_timedwait 函数pthread_cond_signal 函数pthread_cond_broadcast ...原创 2019-09-08 17:29:04 · 1068 阅读 · 0 评论 -
Linux系统编程---18(线程池相关概念及其实现)
线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个 线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不 仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内 存、网络sockets等的数量线程池应用场景需要大量的线程来完成任务,且完成任务的...原创 2019-09-09 17:09:31 · 318 阅读 · 0 评论 -
Linux系统编程----8(竞态条件,时序竞态,pause函数,如何解决时序竞态)
竞态条件(时序竞态):pause 函数调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃 cpu) 直 到有信号递达将其唤醒,等不到一直等int pause(void); 返回值:-1 并设置 errno 为 EINTR返回值:如果信号的默认处理动作是终止进程,则进程终止,pause 函数么有机会返回。如果信号的默认处理动作是忽略,进程继续处...原创 2019-08-18 10:18:34 · 250 阅读 · 0 评论 -
Linux系统编程----7(信号集,信号屏蔽,信号捕捉)
信号集操作函数内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字 mask 可以影响未决信号集。而我们可以在应 用程序中自定义 set 来改变 mask。已达到屏蔽指定信号的目的。信号集设定sigset_t set; //typedef unsigned long sigset_t;int sigemptyset(sigset_t* set); 将某个信号集清 0 成功:0;失败:...原创 2019-08-17 11:19:36 · 493 阅读 · 0 评论 -
Linux系统编程---8(全局变量异步I/O,可重入函数)
全局变量异步 I/O分析如下父子进程交替 数数 程序。当捕捉函数里面的 sleep 取消,程序即会出现问题。请分析原因。#include<stdio.h> #include<signal.h>#include<unistd.h>#include<stdlib.h>intn=0,flag=0; void sys_err(char* ...原创 2019-08-18 20:18:53 · 288 阅读 · 0 评论 -
Linux系统编程---4(进程间通信IPC,管道)
IPCLinux 环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另 一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区, 进程 1 把数据从用户空间拷到内核缓冲区,进程2 再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通 信(IPC,InterProcessCommunication)。在进程间...原创 2019-08-13 20:52:26 · 318 阅读 · 0 评论 -
Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)
进程相关概念程序和进程程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)进程:是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序(程序员角度),占用系统资源,分配资源的基本单位(操作系统角度)。在内存中执行。(程 序运行起来,产生一个进程)进程与程序的关系程序就好像剧本,而进程呢就像一台戏。同一个剧本可以在多个舞台同时上演。同样,同一...原创 2019-08-09 20:26:01 · 730 阅读 · 0 评论 -
Linux系统编程---5(共享存储映射,存储映射I/O,mmap函数,父子进程间通信,匿名映射)
共享存储映射文件进程间通信使用文件也可以完成 IPC,理论依据是,fork 后,父子进程共享文件描述符。也就共享打开的文件。编程:父子进程共享打开的文件。借助文件进行进程间通信。测试代码/* * * 父子进程共享打开的文件描述符----使用文件完成进程间通信 * */#include<stdio.h>#include<unistd.h>#inclu...原创 2019-08-14 17:28:14 · 666 阅读 · 0 评论 -
Linux系统编程--2(环境变量,进程控制)
环境变量环境变量是指在操作系统中用来指定操作系统运行环境的一些参数每个人用电脑的习惯不一样,比如一般把文件放到磁盘,怎么管理文件,用什么编译器,所以,环境变量就是根据每个人使用操作系统的习惯来规定一些参数具体特征字符串(本质)有统一的格式:名=值[:值]值用来描述进程环境信息存储形式:与命令行参数类似。char*[]数组,数组名 environ,内部存储字符串,NULL 作为...原创 2019-08-10 19:41:36 · 385 阅读 · 0 评论 -
Linux下文件的多进程拷贝
大文件拷贝假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件 大小为 len,共有 n 个进程对该文件进行拷贝。那每个进程拷贝的字节数应为 len/n。但未必一定能整除,我们可 以选择让最后一个进程负责剩余部分拷贝工作。可使用 len%(len/n)将剩余部分大小求出。为降低实现复杂度,可选用 mmap 来实现源、目标文件的映射,通过指针操作内存地址...原创 2019-08-15 09:26:09 · 1088 阅读 · 0 评论 -
Linu系统编程---9(SIGCHLD 信号,信号传参,中断系统调用)
SIGCHLD 信号SIGCHLD 的产生条件子进程终止时子进程接收到 SIGSTOP 信号停止时子进程处在停止态,接受到 SIGCONT 后唤醒时借助 SIGCHLD 信号回收子进程子进程结束运行,其父进程会收到 SIGCHLD 信号。该信号的默认处理动作是忽略。可以捕捉该信号,在捕捉函 数中完成子进程状态的回收。linux系统根据未决信号集来处理信号,多个信号进入未决信号集只...原创 2019-08-24 08:43:25 · 255 阅读 · 0 评论 -
Linux系统编程---6(信号的机制,信号4要素,Linu常规信号表,定时器)
信号的概念信号在我们的生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪… 他们都有共性:简单不能携带大量信息,只能带一个标志。满足某个特设条件才发送。Unix 早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley 和 AT&T 都对信号模型做了更改,增加 了可靠信号机制。但彼此不兼容。POSIX.1 对可靠信号例程进行了标准化。...原创 2019-08-16 09:50:30 · 292 阅读 · 0 评论 -
Linux系统编程--3(exec 函数族,僵尸进程和孤儿进程,wait和wait_pid回收子进程)
exec 函数族fork 创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支) ,子进程往往要调用一种 exec 函数以执行另一个程序。当进程调用一种 exec 函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序 的启动例程开始执行。调用 exec 并不创建新进程,所以调用 exec 前后该进程的 id 并未改变。将当前进程的.text、.data 替换为所要加载的程...原创 2019-08-12 23:10:59 · 512 阅读 · 0 评论 -
cpu中的MMU的作用
虚拟内存与物理内存之间的映射用户空间映射到物理内存是独立的,提高安全性修改内存访问级别 (0是最高级)原创 2019-07-10 19:40:47 · 1140 阅读 · 0 评论