Appearance
ASCII、Unicode、UTF 8 区别联系
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
什么是进程?什么是线程?协程?区别?
进程(process):一个程序对一个数据集动态的执行过程;是资源分配的基本单位;有自己的地址空间;通信需要IPC(进程间通信);系统单元和独立调度的基本单位 线程(thread):一个进程内调度的基本单位;进程可有多个线程;同一进程下的线程根据全局变量或传递地址方式来传递信息 协程(coroutine):用户态的轻量级线程,线程是抢占式调度,协程是非抢占式调度,避免了无意义的调度,协程的调度完全由用户控制,提高性能;失去使用多cpu能力
线程切换代价更小,那是为什么呢?线程切换会执行什么操作?
线程间如何通信的
线程共享内存是怎么实现的
互斥和同步
进程和线程哪些资源共享哪些独占呢?
僵尸进程,孤儿进程,守护进程?
僵尸进程:子进程比父进程先结束,父进程又不回收子进程(一直占用资源);子进程结束后父进程收到信号量(SIGCHLD)就进行回收操作 孤儿进程:父进程结束,子进程还在运行的;由init(pid=1)管理了;无危害 守护进程:独立于终端的进程;
创建守护进程步骤
调用fork(),创建新进程,它会是将来的守护进程. 在父进程中调用exit,保证子进程不是父进程,成为孤儿进程 调用setsid()创建新的会话区,让进程摆脱原会话的控制、让进程摆脱原进程组的控制和让进程摆脱原控制终端的控制。(如果不进行这步,孤儿进程将会在控制终端退出后退出) 将当前目录改成根目录(如果把当前目录作为守护进程的目录,当前目录不能被卸载他作为守护进程的工作目录) 将标准输入,标注输出,标准错误重定向到/dev/null.(否则会在控制终端中输出) 重设文件创建掩码,文件创建掩码是指屏蔽掉文件创建时的对应位。由于使用fork函数新建的子进程继承了父进程的文件创建掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件创建掩码设置为0,可以大大增强该守护进程的灵活性。设置文件创建掩码的函数是umask,通常的使用方法为umask(0)。 关闭文件描述符,用fork新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,可能导致所在的文件系统无法卸载。
进程间的通信?
1.管道 2.消息队列 3.进程信号量: 4.共享内存 5.套字节 6.信号:一种异步通知机制,提醒事件已发生,比如:ctrl+c,kill 9 pid等
多线程原理
把操作系统中的并发执行机制的原理用在一个程序中,把程序划分为多个子任务,多个子任务并发地执行,每个子任务就是一个线程
线程的生命周期是什么
线程有哪些实现方式
线程池有哪些属性?
如何停止一个线程
为什么要使用线程池?
编写程序题,三条线程,循环打印abc
实现线程同步的方法有哪些?
io和nio的区别
nio的多路复用
IO多路复用
I/O :网络 I/O 多路 :多个网络连接 复用:复用同一个线程。 IO多路复用其实就是一种同步IO模型,它实现了一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;而没有文件句柄就绪时,就会阻塞应用程序,交出cpu。 select和epoll select:时间复杂度O(n),对所有的流进行轮询 epoll:时间复杂度为O(1),(通知)事件驱动(每个事件关联上fd),
epoll先通过epoll_ctl()来注册一个fd(文件描述符),一旦基于某个fd就绪时,内核会采用回调机制,迅速激活这个fd,当进程调用epoll_wait()时便得到通知。这里去掉了遍历文件描述符的坑爹操作,而是采用监听事件回调的机制。这就是epoll的亮点。
上下文切换
上下文切换是将一个进程切换到另一个进程的一种机制,计算机能并行运行多个程序就是因为在快速地切换的结果。切换要将当前程序的状态保存,再读入下一个进程,并执行 并发、并行和串行 并发执行机制:把一个处理器划分为若干个短的时间片,每个时间片依次轮流地执行处理各个应用程序,由于一个时间片很短,相对于一个应用程序来说,就好像是处理器在为自己单独服务一样,从而达到多个应用程序在同时进行的效果。 我们说高并发指的是可以同时并行处理很多请求,注意这里说的是并行,不是并发。 并行指的是同时处理多个任务,要求是同时且多个任务,所以只有多个CPU才满足。 并发指的是一个CPU轮流切换执行多个任务,注意并发指的是轮流执行,不是任务1执行完了才开始执行任务2。 串行指的是多个任务按顺序执行,任务1执行完才可以执行下一个任务。 很显然串行的效率最低,并发次之,并行的效率最高。
死锁
死锁:两个或以上的进程,由于资源竞争造成的一种阻塞,无外力就一直无法进行。 条件 1.互斥:某段时间内资源有某个进程占用,其他进程只能等待 2.请求保持:进程持有一个资源,又请求其他资源,其他资源被占用中,只能等待,又不释放持有的资源 3.不可剥夺:持有的资源,未执行完不会被剥夺,只能自己释放 4.环路等待:等待形成一个环 预防 1.银行家算法 2.有序资源分配法 解决 破坏四个条件的一个 预防 检查
讲讲 fork 进程的原理?
文本中,对字符编码是如何进行的?如何解析单个字符和中文?
压缩列表为什么节约内存?
Linux 查找文件不确定位置的 key 的平均数
谈谈epoll和select
socket 和 unixsock 区别?
socket:网络套字节,用于本地或远程网络通信
Unixsock:文件套字节,用于一台主机内通信