Linux命令
查看进程的命令:ps命令,后面能接很多后缀,查看进程信息。top命令也可以查看进程信息、CPU使用情况等。
查看后5000行:tail -n 5000。实时查看最新的:tail -f。
cd或者.. 切换目录
ls或ll 查看有哪些文件
mkdir 创建文件夹
touch或vi 可以创建文件
cp 复制文件
mv 移动文件
chmod 文件权限修改
pwd 查看当前路径
cat文件名 查看文件内容
more/less文件名 分页查看
tail/head文件名 查看头部尾部
grep命令 是一种强大的搜索工具,三军刀
wc命令 文件内容统计
awk命令 查看文件中的某行,三军刀
找到指定一个线程的信息(ps aux | grep 线程名)
找到指定文件后缀的文件(ls | grep *.文件后缀)
输出一个文本数据的第三列(awk)
ps 查看当前进程
ps -ef 查看所用进程
ps -ef | grep pid 查看指定线程
kill pid
job -l 查看后台任务
netstat 查看网络是否联通
ifconfig 查看ip地址
Linux命令查看网络情况
socket信息查看:netstat或ss。包含:socket 的状态(State)、接收队列(Recv-Q)、发送队列(Send-Q)、本地地址(Local Address)、远端地址(Foreign Address)、进程 PID 和进程名称(PID/Program name)等。
网络吞吐率和PPS:sar命令。
连通性和延时:ping命令。
Linux命令查看进程运行情况
当系统运行缓慢时,需要查看是哪部分造成的,一般从CPU、内存、IO、系统负载等方面分析。
查看日志
慎用cat:cat查看日志文件,日志文件有多少读多少,这肯定是不合适的。而less命令可以先加载一小部分,往下看继续加载。也可以用tail命令,查看尾部的几行。使用 tail -f 命令,这样你看日志的时候,就会是阻塞状态,有新日志输出的时候,就会实时显示出来。
查看有多少条日志记录:wc -l
网络系统
I/O之零拷贝技术
I/O之Socket编程
socket编程由开始的单线程变为后期的多线程来处理多个请求,那么多线程是如何做的呢?
I/O之多路复用
一个线程处理多个请求,Linux操作系统通过select/poll/epoll供用户态多路复用来调用,即一个线程通过一个系统调用函数从内核获取多个事件。
epoll:xiaolincoding.com/os/8_networ…
进程管理
进程间的通信
(一)管道
Linux命令中会用到管道,比如cat xxx.txt | grep -E ""这个之前用过的命令,这个 | 竖线就是一个管道。管道传输数据是单向的,前一个命令的输出是下一个命令的输入。
管道是一段内存缓存空间,两个进程间用子线程来读取,还挺复杂。
(二)共享内存
Java采用的就是共享内存的机制来通信的,用synchronized和lock去锁住共享内存来保证线程安全。
(三)信号量
就是P、V操作,主要用于进程的互斥与同步
(四)信号
信号和信号量的区别就是java和javascript的区别。
信号是进程通信机制中唯一的异步通信机制。
(五)消息队列
不太知道具体情况
(六)Socket
不同主机上的进程通信,就用Socket了。
看这个还是会有基本的了解的 www.cnblogs.com/swordfall/p… 。还是网络那三个协议,也没别的啥。
死锁
(一)死锁的概念
A线程拿到了A资源去请求B资源,B线程拿到了B资源去请求A资源。
死锁满足的四个条件:
互斥条件:多个线程不能同时持有同一个资源。
持有并等待条件:线程A请求B的同时,是不会释放A的。
不可剥夺条件:线程A的A资源是不会被其他线程获取的。
环路等待条件:多个线程请求资源的顺序形成一个环。
(二)死锁避免、检测
破坏上述四个条件中的任意一个就可以避免死锁!
最常见的一种是:资源有序分配法,破坏环路等待条件。
死锁检测采用银行家算法,推一下是否会有死锁。
(三)锁的类型
遇到冲突要不要加锁:悲观锁和乐观锁。
加锁失败要不要释放CPU:互斥锁和自旋锁。
synchronized自旋锁:无锁、偏向锁、轻量级锁、重量级锁。
读操作要不要加锁:互斥锁和读写锁。
(四)死锁的场景
Java死锁场景:比较简单的一个就是A在sync了o1之后,要sync o2;而B呢,在sync了o2之后,再sync o1。
MySQL的死锁场景:发生在两个事务A和B之间,事务A先update id=5再update id=6;而B呢,先update id=6再update id=5。这样就可能有死锁。
Golang死锁场景:缓存为0的通道就会死锁。itcn.blog/p/180847515…
进程基础
调度算法
在操作系统中,由三种调度,进程调度算法、内存页面调度算法、磁盘调度算法。
多线程冲突
多线程之间需要互斥与同步。
多线程互斥与同步的实现:两种方式,一种是用锁(互斥嘛),一种是用信号量(同步嘛)。
同步中用到了P、V操作,还有经典的生产者消费者问题。