【一】并发编程故事背景介绍

背景每一个故事都有一个开始,那么并发编程的故事的开始是什么呢?由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!

大家好,又见面了,我是全栈君。

背景

每一个故事都有一个开始,那么并发编程的故事的开始是什么呢?

由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。

多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!在多线程的基础上我们来看并发编程!

一定要说的进程和线程

进程

进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的。它是系统进行资源分配和调度的一个独立单位。【根本不知道在说什么】

说白了,进行就是一个运行的程序。比如运行一个QQ、微信,就相当于执行一个进行,在window下,任务管理器中我们可以看到有一个进程的标识!如下图:

这里写图片描述

线程

线程是什么呢?首先线程肯定是要依赖进程,有了进程才有线程!

线程可以理解为在进程中独立运行的子任务,比如QQ中你可以和多个好友聊天(每个聊天窗口相当于启动了一个线程),在聊天的过程中也可以发图片,上传文件等,每个操作都是启动一个新的线程去执行。

线程之间可以共享进程的一些资源,使用多线程在执行多任务多任务的环境中效率会更高!

这里写图片描述

注意:
– 进程是相对于操作系统的;
– 线程是相对于进程的;
– 一定要记住在某些场景下多线程不一定比单线程执行快!

使用多线程的优点

能发挥多核心处理器的强大威力

线程是处理器调度的基本单位,如果一个程序只有一个线程,确运行在双核处理器上,那么处理的利用率只有1/2 ,也就是50%。如果单线程程序运行在核心越多的处理器上,那么利用率越低。

多线程可以提高处理器资源的利用率进而提升系统的吞吐量。

能处理更加复杂的任务

使用多线程,将复杂的异步的工作流分解为一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置进行交互。

使用多线程的缺点【问题】

安全问题

使用多线程会引起线程安全问题,导致某些操作的结果和预期不一致。

在防止出现线程安全的时候,使用同步方法,可能会造成 线程 死锁,影响程序运行。

多线程在出现问题的时候,还不容易排查,不容易复现!

这里提示如果在开发中,使用多线程一定要谨慎和小心。

性能问题

多线程在进行线程上下文切换的时候使用系统资源,如果线程数量太多,会导致系统资源不足,导致系统性能下降。

并且多线程也受到系统资源的限制,会使线程造成阻塞,可能导致多线程的执行效果还不如单线程。

总结

一定要综合起来看多线程,要有全局的视角!

就如看到的一句话,在你写这段代码的时候,就知道会有多少访问量,并发是多少,如果能做到这一点,那就真的厉害了。



如果您觉得这篇博文对你有帮助,请点个赞,谢谢!


如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121130.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月26日 下午8:00
下一篇 2022年2月26日 下午8:00


相关推荐

  • Source insight 3572安装和版本号An invalid source insight serial number was detected解

    Source insight 3572安装和版本号An invalid source insight serial number was detected解

    2022年1月4日
    57
  • flex布局–阮一峰

    flex布局–阮一峰Flex 布局教程 语法篇 阮一峰的网络日志

    2026年3月26日
    2
  • Sigar 编译笔记「建议收藏」

    Sigar 编译笔记「建议收藏」在win7上面编译Sigar,由于开发环境及编译器版本不同,出现了许多问题。开发环境:win7,CMAKE3.11.0-rc2,jdk1.8,perl5,ant1.10.1,vs20151.编译之前要运行%vs_root%\VC\vcvarsall.batamd64,设置vs的编译依赖环境,64位的windows一定要加上参数amd642.vs2015需要根据https…

    2025年8月3日
    4
  • JVM垃圾回收流程「建议收藏」

    JVM垃圾回收流程「建议收藏」        昨天在网易云课堂上看李兴华老师的Java视频,讲到了GC回收垃圾的流程。这部分知识在开发的时候不容易用到,但是懂一点JVM的底层知识,是不是显得我们很有钻研的精神,很踏实呢?整个流程大概是:        当有新对象产生时,会保存在Eden(伊甸园,万物诞生的地方)中。之后这个对象不会在Eden中久留,它会被保存在年轻代中。而后在进行GC后,在新生代中保留下来的对象会被保存到旧生代…

    2025年10月29日
    9
  • 黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…

    黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以用少量的代表性测试数据,来取得较好的测试结果。黑盒测试用例设计技术包括*是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能。在具体问题中,有效等价类可以是一个,也可以是多个。有效等价类*是指对于程序的规格说明…

    2022年6月13日
    36
  • LeetCode–046–全排列(java)

    LeetCode–046–全排列(java)给定一个没有重复数字的序列,返回其所有可能的全排列。示例:无奈,用swap的方法从左向右滑动,直到最后结果和最初的一致停止,只适用于三位数。。。。(改进一下让每个数字作为第一位后面的进行滑动,应该

    2022年7月3日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号