大家好,今天小编关注到一个比较有意思的话题,就是关于并发编程教程的问题,于是小编就整理了5个相关介绍并发编程教程的解答,让我们一起看看吧。

  1. MFC多线程编程?
  2. python 并发编程有用吗?
  3. 推荐几本非常棒的Java多线程编程书籍?
  4. 异步编程与多线程编程的联系和区别?
  5. 在Java并发编程中,如何扩展和优化线程池?

MFC多线程编程?

多线程与单线程的区别是前者是并行,意思是多个线程同时执行

并发编程教程-并发编程教程视频
(图片来源网络,侵删)

一个简单的例子,单线程程序,MessageBox弹出一个对话框,你必须要关闭这个对话框后才能在主窗口上继续操作(整个程序停止运行,等待用户关闭这个弹出窗口),多线程就不会阻塞在这里,一般来说,MFC程序操作界面是一个线程,工作计算是另一个线程。

python 并发编程有用吗?

python并发编程有用。

并发编程教程-并发编程教程视频
(图片来源网络,侵删)

因为在程序中,往往有很多很耗时的工作,比如上传文件、下载文件、跟客户聊天需要长时间建立连接。这种时候,一个线程是服务不了多个用户的,会产生因为***独占产生的等待问题,为了不影响其他功能的正常运行这个时候就有必要进行多线程编程了。

推荐几本非常棒的J***a多线程编程书籍?

1、《J***a并发编程实战》

并发编程教程-并发编程教程视频
(图片来源网络,侵删)

2、《J***a多线程编程核心技术》

3、《J***a多线程编程实战指南》

4、《J***a并发编程的艺术》

专业从事软件研发工作多年,在软件设计、开发、测试、研发管理等领域里经验丰富,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。如果有软件研发方面的问题,可以咨询我。谢谢!

异步编程与多线程编程的联系和区别?

网络编程中,同步的意思是说,进行收发数据,等到数据真正发送出去或者接受到,才返回;而异步的意思是,可以把数据发送到缓冲区立即返回,而发送成功的消息是通过***通知的。

异步可以腾出更多的CPU来处理其他事情,所以异步的方式比较灵活。

线程同步是指,多个线程协同完成一件工作,一个线程需要等待其他线程完成相关的工作,才能接着往下运行。

线程同步一般***用互斥体,信号量,消息等方式。

在J***a并发编程中,如何扩展和优化线程池?

在j***a中多线程并不陌生,在一定的范围内,多线程数量的增加会明显提升整个系统的吞吐性能,但是线程本身会极大的耗费内存空间,线程的频繁创建和回收也极其占用CPU***,多线程甚至会拖垮整个服务!

所以,线程的利用必须掌握在一个度,太少的线程数可能会浪费CPU***,而太高也极有可能反而降低整个应用性能;

线程池:基于使用多线程存在的问题,JDK提出了线程池技术,类似于数据库连接池,都是保持池中部分线程活跃状态,在需要使用线程的时候,直接从线程池中获取,使用。当线程使用结束,就进行回收(直接放回池中等待,而不是GC),这样就能避免了线程的频繁创建和回收。

J***A中的线程池:JDK提供了线程池框架Executor,帮助程序更好的管理线程。总的结构如下截图:

比较常见的线程池对象获取方式为:

①newSingleThreadExecutor():返回单线程的线程池,一个接一个的处理任务,线程异常的时候,会创建新的线程替代; ②newFixedThreadPool:在达到最大线程之前,有一个任务就创建一个线程,直到达到最大线程数量; ③newCachedThreadPool:动态的设置最合适的线程数量,最大为JVM能够支持的大小; ④newScheduledThreadPool:指定线程数量,并周期性的执行任务; ⑤newSingleThreadScheduledExecutor:指定线程数量1个,并周期性的执行任务;

从源码来看,上面几种线程池底层都是封装的ThreadPoolExecutor对象,查看源码可知比较重要的属性(对象)截图如下:



定义了线程池中的线程数量,最大线程池数量,线程工厂(用于线程的创建),workQuere任务队列,handler拒绝策略等属性,用于线程池的对象初始化和任务调度!

下图是ThreadPoolExecutor对象中的execute方法截图:

解释如下:

1,当前线程总数小于核心线程数,则通过addWorker进行执行;

2,否则通过wordQueue.offer提交到等待队列,

3,进入等待队列失败,则通过addWorker提交到线程池,失败则执行拒绝策略;

线程池有多种拒绝策略:直接抛出异常,或者丢弃无法处理的任务等等,此处不做详细讨论。。

线程池的扩展:JDK允许开发人员自主扩展线程池,通过提供的beforeExecute,afterExecute,terminated三个接口可以像处理AOP一样方便的管理线程池,可自行实现状态跟踪,调试信息等用以监控线程池!

线程池的优化:线程池的优化主要针对线程数量进行,一般来说只要使用的不是最大最小线程数量都可以,但是具体的还要根据场景,参考CPU核心数,等待时间等因素来判断最合适的线程数,比如是批量运算这种密集的CPU执行,则线程数设置为CPU核心数即可,如果有大量阻塞,则可以使用CPU核心数的偶数倍数,在有一本书中得出了一个公式如下截图:

jdk中的线程池技术比较完善,加上其他的多线程技术,促使J***A成为高并发领域的佼佼者,最近一直在分享J***A技术,得到很多朋友的鼓励,在此表示感谢,我也会一直持续的进行分享,敬请关注。。

到此,以上就是小编对于并发编程教程的问题就介绍到这了,希望介绍关于并发编程教程的5点解答对大家有用。