并发编程一
线程的优势:
- 更好的资源利用。
- 响应更灵敏的交互
- 建模简单。执行单一类型任务比执行多类型任务,减少优先级控制复杂性和任务类型切换。 多线程可以为每一个类型的任务分配单独的线程执行
线程开发带来的挑战:
- 安全性。实例变量使用不当
- 活跃性。死锁、饥饿、活锁。
- 性能问题。
线程的后果:
- 更复杂的设计
- 上下文切换开销
- 资源消耗增加
临界区(Critical Sections) 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。 在相同的应用内部运行不止一个线程不会被他自己引起问题。当多个线程访问相同的资源问题就会出现。例如相同的内存(变量,数组,或者对象),系统(数据库,web服务)或者文件。 事实上,如果一个或者多个线程写这些资源的时候问题会出现。
竞态条件(race condition) 一个竞态条件是一个特殊的条件,可能发生在一个临界部分的内部(critical section)。一个临界部分是一段正在被多线程执行的代码,以及线程执行的顺序对于临界部分并发执行的结果产生影响。