Linux System 编程
lcxhjg
这个作者很懒,什么都没留下…
展开
-
C10K问题
1 C10K问题大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多。一台服务器同时在线100个用户估计在当时已经算是大型应用了。所以并不存在什么C10K的难题。互联网的爆发期应该是在www网站,浏览器,雅虎出现后。最早的互联网称之为Web1.0,互联网大部分...转载 2018-09-20 12:37:55 · 156 阅读 · 0 评论 -
Linux守护进程编写规范
编写规范1. 调用umask将文件模式创建屏蔽字设置为0.2. 调用fork,然后使父进程退出3. 调用setsid以创建新的会话4. 将当前工作目录更改为根目录5. 关闭不再需要的文件描述符6. 某些守护进程打开/dev/null使其具有文件描述符0, 1和27. 用户可以选择屏蔽部分信号...原创 2018-07-13 09:44:49 · 124 阅读 · 0 评论 -
Linux下优先级反转
原创 2018-07-13 09:44:45 · 1581 阅读 · 0 评论 -
进程栈; 线程栈
1. 每个线程都有一个栈;2. 进程中各个线程的栈是共享的 (从用法上来讲,每个线程有一个独立的栈, 但是从linux内存管理上讲, linux不能以线程为单位管理内存; 一个线程可以访问另一线程的栈内容,而MMU不会报错.)3. Linux在设计时贯彻一个”早死早超生”的原则, 他会检测正常的栈越界. 正常的栈越界是慢慢地,循序渐进地, linux内核在两个线程的栈...原创 2018-07-12 09:38:44 · 712 阅读 · 0 评论 -
设置线程退出时的回调函数
This is done by specifying one ormore functions that will be called automatically by the pthreads library whenthe thread exits, either due to its own will (e.g. calling pthread_exit()), ordue to it be...原创 2018-07-12 09:38:38 · 1283 阅读 · 0 评论 -
线程私有数据
线程私有数据是存储和查询与某个线程相关的一种机制。一个明显的实例就是errno, 一个线程做了设置errno的操作并不会影响进程中其它线程的errno值。API pthread_key_create man pthread_key_create pthread_key_delete pthread_once pthread_getspecific pthread_sets...原创 2018-07-12 09:38:27 · 114 阅读 · 0 评论 -
线程属性
在创建线程前可以设置该线程的属性,可设置的属性有:(线程默认的属性是:detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER, nouser-provided stack)1. 线程的分离状态(detachstat), 如果设置为分离状态,则不能接受pthread_join.2. 线程栈的位置...原创 2018-07-12 09:38:18 · 319 阅读 · 0 评论 -
进程中可以创建线程的最大个数
1. 首先,不同的系统,线程的最大个数的定义不同。2. 线程个数与每个线程所占空间有关系。线程所占空间首先看栈空间的大小。3. 线程栈空间可以通过’ulimit –s’ 查看和修改。4. 虚拟内存空间可以通过’ulimit –v’查看和修改。5. 线程最大个数的计算:Linux虚拟内存空间大小(3G) / 线程栈空间的大小。6. Li...原创 2018-07-12 09:38:12 · 1163 阅读 · 0 评论 -
线程间通信
锁机制互斥锁同一时间只有一个线程访问数据。互斥锁采用pthread_mutex_t数据类型表示,常用API包括:API pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock 读写锁读写锁有三个状态:读模式下加锁状...原创 2018-07-12 09:37:05 · 89 阅读 · 0 评论 -
进程间通信与同步
环境变量 http://www.tldp.org/LDP/lpg/node7.html 管道/有名管道 管道用于具有亲缘关系的进程间通信。有名管道除具有管道的功能外,它还允许无亲缘关系的进程间的通信。管道和有名管道均为半双工的通信方式。管道只能承载无格式字节流以及缓冲区大小受限。1. 管道a) Pipeb) fopen2. 有名管道a) ...原创 2018-07-12 09:36:59 · 106 阅读 · 0 评论 -
进程优先级/进程调度策略
http://www.cnitblog.com/flutist1225/articles/19989.html 如何查看/设置/调整进程的优先级1. 查看:ps –l xxx2. 设置:nice3. 调整:renice4. 修改为实时进程: chrt进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。 5. ...原创 2018-07-12 09:36:50 · 1929 阅读 · 0 评论 -
控制进程/线程只在某个/某些进程上运行.
sched_getaffinity / sched_setaffinity控制进程/线程只在某个/某些进程上运行.原创 2018-07-13 09:45:40 · 127 阅读 · 0 评论 -
用户空间和内核空间的交互方式
IoctlProcNetlink socketSys原创 2018-07-15 18:01:29 · 387 阅读 · 0 评论 -
进程和线程的区别
进程和线程的区别 (待完善)1. 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。2. 进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。3. 一个进程...原创 2018-07-13 09:45:33 · 95 阅读 · 0 评论 -
国内最流行且免费的11个服务器监控工具
国内最流行且免费的11个服务器监控工具,拿走不谢! 作者: 水淼 日期: 2017-03-28 09:00:43 人气: 3...转载 2018-07-15 18:03:23 · 61001 阅读 · 5 评论 -
Linux系统内的线程间通信方式
原创 2018-07-16 08:50:42 · 845 阅读 · 0 评论 -
同一个Linux系统内的进程间通信方式
原创 2018-07-13 09:47:11 · 161 阅读 · 0 评论 -
socket 端口重用
使用SO_REUSEADDR选项, 处于TIME_WAIT状态(还有其他情况导致端口资源还没完全释放)的socket的端口可以被立即重用。原创 2018-07-15 18:00:21 · 1594 阅读 · 0 评论 -
socket Select/Poll/EPoll
Select Poll Epoll 一个进程所能打开的最大连接数 单个进程所能打开的最大连接数有FD_SETSIZE宏定义 poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的 虽然连接数有上限,但是很大 FD剧增后带来的IO效率问题 因为每次调用时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的“线性下降性能问题 同sele...原创 2018-07-13 09:46:20 · 134 阅读 · 0 评论 -
SSH代理
Network topology反向代理Lan PC 可以ssh到Internet上的PC, 但是Internet上的PC不能ssh到Lan PC.如果想internet上PC能够ssh到lan PC, ssh 反向代理的解决办法:1. 在lan PC上执行如下命令:$ ssh wanuser@13.121.57.154 -R 21436:127.0.0.1:222. 在Int...原创 2018-07-16 08:51:10 · 236 阅读 · 0 评论 -
如何防止一块内存被交换到disk
Mlock/mlockall/munlock To prevent a region of memory from being swapped to disk, use the following call:r = mlock( ptr , size );原创 2018-07-16 08:54:02 · 506 阅读 · 0 评论 -
Linux系统调用
原创 2018-07-13 09:45:29 · 108 阅读 · 0 评论 -
单个进程中最大允许的线程数
1. 与系统资源相关,即线程栈的大小 a) 线程栈默认大小可以通过‘ulimit -s’查看,通常这个值是8M。如果用户修改了该值,则可以查看’/proc/self/limits’获取该进程相应的值 (其实是需要考虑线程栈和guard page的size)b) 在32系统上用户空间大小为3G,3 * 1...原创 2018-07-13 09:46:52 · 3910 阅读 · 0 评论 -
Linux中的内存管理
内存管理中的overcommit1. 什么是overcommitLinux calls this overcommit, which refers to the fact that thekernel allows a process to allocate more memory than is currently available.The kernel is effectively...原创 2018-07-13 09:45:26 · 285 阅读 · 0 评论 -
进程/线程的CPU/MEM/NET使用控制
Linux系统提供Control Group(CGrop)这个Feature控制系统资源在不同服务间的分配。原创 2018-07-15 18:01:03 · 219 阅读 · 0 评论 -
线程优先级
线程优先级1. 首先,线程的优先级与进程的优先级有关。???2. 可以通过线程的相关属性设置/修改线程的调度策率和优先级:pthread_getschedparam / pthread_setschedparam / pthread_setschedprio...原创 2018-07-13 09:44:34 · 301 阅读 · 0 评论 -
进程创建/进程的终止
进程创建fork函数1. 对于fork函数,父进程中返回子进程的pid,因为父进程可能有多个子进程,但没有一个系统调换可以获取所有子进程的pid; 子进程中返回0,因为一个进程只能有一个父进程,可以通过getppid获取父进程的pid.2. 对于fork函数,子进程获得父进程的数据段,堆,栈的副本。父子进程共享正文段。子进程中需要复制的内容并不会被立即完全复制,而是采用...原创 2018-07-12 09:36:39 · 214 阅读 · 0 评论 -
文件访问权限位
程序运行时具有其它用户的权限. (以其它用户权限运行程序)原创 2018-07-11 15:17:45 · 218 阅读 · 0 评论 -
文件IO
1. 标准文件fd: 0, 标准输入;1, 标准输出; 2: 标准错误2. 进程所有打开的fd可以在/proc/pid/fd中查看;3. 常用文件操作函数:open, read, write, close, lseek, ioctl4. 创建临时文件: mktemp5. 文件空洞...原创 2018-07-11 15:16:34 · 106 阅读 · 0 评论 -
原子操作/可重入函数/线程安全函数
原子操作原子操作是由多个步骤组成的操作。如果该操作原子的执行,则要么执行完所有的操作,要么一步也不执行。可重入函数 在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在...原创 2018-07-11 15:15:45 · 305 阅读 · 0 评论