
Unix/Linux编程
文章平均质量分 87
博弈Dream
code and code
展开
-
Linux信号机制
信号是在特定事件发生时由操作系统向进程发送消息。为了响应消息,执行与消息相关的自定义操作时的过程称为“信号处理”。信号与signal函数信号注册函数#include<signal.h>void(*signal(int signo,void (*func)(int)))(int);函数名:signal参数:int signo,void (*func)(int)...原创 2018-01-12 19:07:38 · 964 阅读 · 0 评论 -
守护进程与孤儿进程
基本定义 守护进程:是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以它们是在后台运行的。UNIX系统有很多守护进程,它们执行日常事务活动。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。...原创 2018-08-04 08:55:42 · 1470 阅读 · 0 评论 -
Reactor模式
处理web请求,主要有两种体系结构:thread-based(基于线程)和event-driven(基于事件驱动) architectures.基于线程 基于线程的体系结构通常会使用多线程来处理客户端的请求,每当接收到一个请求,便开启一个独立的线程来处理。这种方式虽然是直观的,但是仅适用于并发访问量不大的场景,因为线程需要占用一定的内存资源,且操作系统在线程之间的...原创 2018-07-20 15:37:46 · 1681 阅读 · 0 评论 -
Linux/Unix 时间与日期函数
由UNIX内核提供的基本时间服务时计算自协调世界时(UTC)公元1970年1月1日00:00:00这一特定时间以来经过的秒数。这种秒数是以数据类型time_t表示的,称为日历时间。日历时间包括时间和日期。UNIX在这方面与其他操作系统的区别是: 1)以协调同一时间而非本地时间计时 2)可自动进行转换,如变换到夏令时 3)将时间与日期作为一个量值保存time函数返回当...原创 2018-07-07 18:52:23 · 2117 阅读 · 0 评论 -
边缘触发和水平(条件)触发
条件触发(LT)和边缘触发(ET)的区别在于事件的时间点边缘触发:每当状态变化时发生一个IO事件条件触发:只要满足条件就发生一个IO事件在条件触发方式中,只要输入缓冲有数据就会一直通知该事件。例如:服务器输入缓冲收到50字节的数据时,服务器端操作系统将通知该事件(注册到发生变化的文件描述符)。但服务器端读取20字节后还剩30字节的情况下,仍会注册事件。也就是说,条件触发方式中,只要输入缓冲中还剩有...原创 2018-06-29 18:08:47 · 2721 阅读 · 1 评论 -
一个简单线程池的实现
线程池(thread pool)是一种多线程的处理形式,处理过程中将任务添加到队列,然后创建线程,启动并处理这些任务。组成部分服务器程序可以利用线程技术响应客户端请求。1、线程池管理器:用于创建并管理线程2、工作线程:正在处理任务的线程3、任务接口:每个任务必须实现的借口,以供工作线程调度任务的执行4、任务队列:用于存放没有被...原创 2018-04-25 14:40:54 · 649 阅读 · 0 评论 -
基于Linux的文件操作
在对文件进行读写操作前,需要先打开该文件。内核为每个进程维护了一个打开文件的列表,该表被称为文件表。该表由一些叫做文件描述符的非负整数进行索引。列表中的每项均包含一个打开文件的信息,其中包括一个指向文件备份inode内存拷贝的指针和元数据(例如文件位置和访问模式等)。用户空间和内核空间都把文件描述符作为每个进程的唯一cookies。打开一个文件返回一个文件描述符,而接下来的操作则把文...原创 2017-09-24 08:59:04 · 816 阅读 · 1 评论 -
Linux多线程临界区问题
临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用,例如:semaphore。只能被单一线程访问的设备,例如:打印机。看下面一个例子,#include#include#include原创 2018-01-25 20:02:39 · 1354 阅读 · 0 评论 -
Linux进程间通信--管道
进程间通信是指两个不同进程间可以交换数据,因此操作系统应提供两个进程可以同时访问的内存空间。普通管道(PIPE) 为了完成进程间通信,需要创建管道,管道不属于进程的资源,而是和套接字一样属于操作系统。因此两个进程通过操作系统提供的内存空间进行通信。下面是创建管道的函数:#include<unistd.h>int pipe(int filedes[2]...原创 2018-01-14 18:22:19 · 994 阅读 · 0 评论 -
Linux I/O复用-select函数和epoll函数
应用程序往往需要在多于一个文件描述符上阻塞:例如相应键盘输入、进程间通信以及同时操作多个文件。基于事件驱动机制的图形用户界面(GUI)应用的主循环中可能包含上百个等待响应的文件。 在不使用线程,尤其是独立处理每一个文件的情况下,进程无法在多个文件描述符上同时阻塞。如果文件都处于准备好被读写的状态,同时操作多个文件描述符是没有问题的。但一旦在该过程中出现一个未准备好的文...原创 2018-01-16 14:51:37 · 1376 阅读 · 0 评论 -
Linux多线程机制
创建进程的工作本身会给操作系统带来沉重的负担,而且每个进程具有独立的内存空间,因此进程间通信的实现难度也不低。其主要缺点如下: 1.创建进程的过程会带来一定的开销 2.为了完成进程间数据交换,需要特殊的IPC技术另外每秒数十次、甚至数千次的‘上限文切换’是创建进程时的最大的开销。单CPU系统将CPU时间分成多个微小的块后分配给了多个进...原创 2018-01-23 20:33:47 · 903 阅读 · 0 评论 -
I/O模型
一、基本概念通常有同步/异步,阻塞/非阻塞四中调用方式:1. 同步和异步主要针对客户端 同步:所谓的同步,就是在客户端发出一个功能调用时,在没有得到结果之前,该调用不返回,也就是说必须一件一件事做,等前一件事完了之后才做后一件事。 如:普通的B/S模式(同步):提交请求->等待服务器处理->处理完毕返回,这期间客户端浏览器不能干任何事异步:与同步相对。当客户端一个异步过程调用发出之...原创 2018-08-19 20:21:51 · 273 阅读 · 0 评论