并发编程问题

1 为什么并发编程?

1)使用多线程可以减少程序的响应时间,单线程中,如果出现某个操作很耗时,陷入长时间的等待,可以分配时间给别的线程。

2)与进程相比,线程的创建和切换开销很小,因为同一线程共享代码段,数据段

3)本身cpu或多核计算机本身就具有执行多线程能力,不用就浪费。

2 并发编程出现的问题?

1)多线程执行代码在计算机的底层使用是通过CPU来给予每个线程时间片来实现这个机制。由于CPU分配的每个线程的时间片极为短暂(一般为几十毫秒),所有CPU通过不停地切换线程执行。这样就给程序员一种错觉,以为多个线程是在同时执行。既然CPU来不断的来回在几个线程中进行切换,所以CPU在从一个线程切换到另一个线程的时候肯定要记录一下当前线程执行到哪了,以遍下一次切换到该线程的时候可以继续执行。所以线程从保存在再次被执行的过程就是一次上下文切换。

当数据量不是很大时。单线程的效率却优于多线程,因为多线程有线程的创建与上下文切换的开销。但数据足够大时当然多线程优于单线程。

2)并发编程不一定安全造成这种结果的原因就是因为多个线程试图操作一个被所有线程共享的变量,而出现的线程不安全问题。

3)在实际开发不会出现这样的问题。但是,在一些复杂的场景中,可能会出现这样的问题,比如t1线程拿到锁之后,因为一些异常情况没有释放掉锁(死循环)。又或者在释放锁时出现异常,导致释放失败。出现死锁,程序则不能继续提供服务


猜你喜欢

转载自blog.csdn.net/Juleen890/article/details/80782686
今日推荐