多线程
常用的线程相关的API: pthread,NSThread,NSOperation,GCD
GCD

GCD内部管理着一个线程池,由系统维护线程池中线程的数量。队列中的任务交给系统分配的线程执行。
barrier、group
锁
相关文章介绍自旋锁、互斥锁跟信号量: https://www.cnblogs.com/biyeymyhjob/archive/2012/07/21/2602015.html
概念:
- 临界区:指的是一块对公共资源进行访问的代码,并非一种机制或是算法。
- 自旋锁:是用于多线程同步的一种锁,线程反复检查锁变量是否可用。由于线程在这一过程中保持执行,因此是一种忙等待。一旦获取了自旋锁,线程会一直保持该锁,直至显式释放自旋锁。 自旋锁避免了进程上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的。
- 互斥锁(Mutex):是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区而达成。
- 读写锁:是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁) 用于解决多线程对公共资源读写问题。读操作可并发重入,写操作是互斥的。 读写锁通常用互斥锁、条件变量、信号量实现。 — 信号量(semaphore):是一种更高级的同步机制,互斥锁可以说是semaphore在仅取值0/1时的特例。信号量可以有更多的取值空间,用来实现更加复杂的同步,而不单单是线程间互斥。
- 条件锁:就是条件变量,当进程的某些资源要求不满足时就进入休眠,也就是锁住了。当资源被分配到了,条件锁打开,进程继续运行。
互斥锁:NSLock,pthread_mutex,@synchronized
自旋锁:OSSpinLock,os_unfair_lock
读写锁:pthread_rwlock
递归锁:NSRecursiveLock,pthread_mutex(recursive)
条件锁:NSCondition,NSConditionLock
信号量:dispatch_semaphore
Runloop
大神文章: https://blog.ibireme.com/2015/05/18/runloop/
Runloop是一个事件循环用于处理事件消息,在没有事件时通过math_msg从用户态切换到内核态使得线程休眠。 它与线程是一一对应的,一个新的线程默认是没有Runloop的。
这里相关的东西会涉及到系统内核,需要补充操作系统相关知识。