做开发这么久了,多线程一直都在用,却没有好好总结过.如今年底了,准备总结一波.也方便以后自己再回来看.
我不太喜欢纠结概念上的东西这里就简单浅显的说下我的理解,实践是检验真理的唯一途径,所以我比较喜欢直接撸代码.
以下是大致的理论概括图文:
- 开发多线程,首先要了解什么是进程.其实通俗的来讲,一般一个线程指的就是一个程序.比如我们mac上运行的一个软件比如我们的Xcode.iPhone上运行的一个app,其实就是一个进程. 进程的五态模型
- 什么是线程,线程就是进程的最小组成单元. 进程 .png
-
线程的执行有2种
串行
各个线程按顺序执行,总时间是各个线程的耗时之和.
并行,是多个线程同时执行.总时间取决于耗时最长的子线程.
其实并行也不一定就是真的同时执行多个线程
-
单核操作系统,其实是cpu来回的在多个线程中调度.实质上还是一次只能执行一个线程的任务
单核并行.png
2.多核操作系统
多核操作系统.png
-
多线程的优点
- 简化了编程模型:在一个比较复杂的系统设计中,如果我们想在单一的线程中高效的处理比较大的或者比较零散任务的时候其实是很难实现的 有了多线程,其实我们就可以将大的任务进行切割,这样就大大的简化了我们的模型
- 更加的轻量级
-
提高了执行效率
说通俗点,就好比原来一个人的活变成好几个人同时干了,效率自然就提升了 - 提高资源利用率
- 多线程缺点
-
增加了程序设计复杂性
虽然前面说它可以简化编程模型,但程序的复杂性也大大增加了,多线程其实要解决的最大问题是资源共享以及线程读写的问题.这个在我们的实际项目中经常会遇到, 比如我们在操作一个数据库,如果一个线程在执行写操作,另一个线程其实是不允许同时执行写操作的,否则在写的过程中,就会出错. 再比如有个变量,你在一个线程中修改它的值,同时在另一个线程中也改了它的值.这个时候你再去读这个值的时候,很可能这个值,就不是你所预期的了. 所以这些种种的问题,都是我们在做线程开发中需要注意的.所以这样就大大增加了我们程序设计的复杂性. -
占用内存空间.
在刚接触多线程的时候,我发现这个东西真的很好用啊,提高执行效率,结果造成不分场合,不分地点的乱用.这样就会导致程序内存的增加.对于客户端开发,程序的内存是至关重要的.他直接影响了程序的使用性.所以多线程要用得适度,用得合理. -
增大了cpu的调度开销
系统在做时间片轮转,调度的时候.cpu会在多个线程中切来切去,势必会增大cpu的开销,导致cpu的占用率增加,对系统会造成一定的影响.
接下来就是oc中常用到的几种开辟线程需要用到的模块.将在后文中一一探索.
...
网友评论