Linux相关,怎么查看各个进程的占用率,怎么查看Nginx日志,知不知道服务器抓包(Tcpdump)
多线程之间的通信
- 共享变量
- 消息队列
进程间通信有哪些方式(Linux)?分别怎么实现?
1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期 信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上, 该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,sigaction函数重新实现了signal函数);
3.报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4.共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针其他通信机制运行效率较低设计的。往往与其它通信机制,如信号量结合使用, 来达到进程间的同步及互斥。
5.信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
6.套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix 系统上:Linux和System V的变种都支持套接字线程与进程
两者的区别——资源分配,调度,通信
父进程和子进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。
操作系统中引入进程的目的是实现多个程序的并发执行,从而改善资源的使用效率并提高系统的运作效率;而引入线程则是为了减少程序并发执行时所付出的时空开销,从而使并发粒度更细化、并发性能更优越。
一个线程会与同属于一个进程的其他线程共享进程代码段、数据段和其他操作系统资源。
os给进程和线程都分配哪些资源?共享的数据, 进程的内存空间
现有平行的几个进程,如果其中一个进程挂了,会影响其他线程吗?一个进程有多个线程,有一个挂了,对其他线程有影响吗?为什么?
一般的应用程序是单个进程,也有多进程(Chrome),进程是个静态的容器,里面容纳了很多个线程,线程是一系列方法的线性执行路径。
进程调度
先来先服务(FCFS)调度算法和短作业(进程)优先调度算法SJ(P)F
高优先权优先调度算法
在抢占式操作系统中,假设有若干进程,操作系统会根据他们的优先级、饥饿时间(已经多长时间没有使用过 CPU 了),给他们算出一 个总的优先级来。操作系统就会把 CPU 交给总优先级最高的这个进程。当进程执行完毕或者自己主动挂起后,操作系统就会重新计算一 次所有进程的总优先级,然后再挑一个优先级最高的把 CPU 控制权交给他。
基于时间片的轮转调度算法
Linux ps命令,以及看内存当前使用状态的命令
设计一个高效的线程调度
内存池实现
定长内存池
Linux初期没有多线程如何处理并发
呼呼呼山(http://code4fun.me)
11 Jan 2018 10:40 PM