JAVA中线程同步和io同步的区别

JAVA中线程同步和io同步的区别是:线程同步是 CPU 执行的同步所谓同步,是为了数据操作的原子性。io同步是数据流读写(比如磁盘、网卡)的同步。比如往 stream 先 write aaa,这时候 buffer 缓冲区就有了 aaa,再 write bbb,如果并行不同步操作的话,就会出现 abaabb 的乱序。

JAVA中线程同步和io同步的区别-Worktile社区

线程同步

线程同步即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。线程同步是 CPU 执行的同步所谓同步,是为了数据操作的原子性。

在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。

在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,非常多有一个线程访问,以保证数据的完整性。

同步IO

在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO。

在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。

io同步是数据流读写(比如磁盘、网卡)的同步。比如往 stream 先 write aaa,这时候 buffer 缓冲区就有了 aaa,再 write bbb,如果并行不同步操作的话,就会出现 abaabb 的乱序。

多线程多进程的解决思路

因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务。每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他用户的线程不受影响。

多线程和多进程的模型虽然解决了并发问题,但是系统不能无上限地增加线程。由于系统切换线程的开销也很大,所以,一旦线程数量过多,CPU的时间就花在线程切换上了,真正运行代码的时间就少了,结果导致性能严重下降。

延伸阅读:

什么是Java

Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的”形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种”以对象为导向”的方式。使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

Java是Sun微系统公司在1995年推出的,推出之后马上给互联网的交互式应用带来了新面貌。最常用的两种互联网浏览器软件中都包括一个Java虚拟机。几乎所有的操作系统中都增添了Java编译程序。

使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

文章标题:JAVA中线程同步和io同步的区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37824

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月12日 下午4:35
下一篇 2023年2月12日 下午4:36

相关推荐

  • 产品管理流程中的关键步骤是什么

    产品管理流程中的关键步骤有多个,包括1、需求分析,2、市场研究,3、产品定义与规划,4、设计与开发,5、测试与验证,以及6、产品发布和维护。需求分析是明确产品需求的基础,而市场研究则有助于定位产品。产品定义与规划是整个流程的核心,随后转入设计与开发阶段。在产品完全开发之后,进行严格的测试与验证,最后…

    2023年9月22日
    55000
  • DevOps如何提高应用程序的自动化持续集成和持续交付

    开门见山地,DevOps 通过实施自动化工具链、构建高效的工作流以及促进团队之间的紧密协作,显着提高了应用程序的自动化持续集成(CI)和持续交付(CD)。CI/CD 是 DevOps 实践的核心,它们可以加速开发周期,减少人为错误以及提高软件质量。1、通过配置管理工具确保环境的一致性,2、利用自动化…

    2024年1月18日
    21600
  • 项目监理人员如何管理工作

    项目监理人员通过严格的项目管理流程来确保项目成功,主要包括明确监理角色和职责、制定详细的监理计划、进行有效的沟通、实施质量控制、监控项目进度、以及风险管理。在这些方面中,明确监理角色和职责是核心的第一步,因为它直接决定了监理团队能否高效、有序地开展工作。 监理人员需清楚自己的角色定位和职责范围,这意…

    2024年4月11日
    6900
  • 如何做好项目机电管理

    如何做好项目机电管理,关键在于遵循系统化管理流程、细化施工计划、强化质量控制、优化团队协作。对于项目机电管理而言,特别要重视系统化管理流程。这意味着要建立一套全面、系统的管理框架,包括但不限于项目计划、设计审批、物资采购、施工实施、调试验收等多个阶段,其目的在于确保项目机电部分的顺利进行,减少返工与…

    2024年4月10日
    6200
  • 格安oa系统

    标题:格安OA系统 格安OA系统提供了一种高效实惠的组织管理解决方案,适合各类企业尤其是中小型企业。其主要优势包括:1、成本效益显著;2、操作简便;3、扩展性和灵活性强;4、易于升级和维护;5、支持移动办公。例如,成本效益显著意味着公司可以在不牺牲功能的同时减少基础架构的投资。这个系统通常通过基于云…

    2024年1月12日
    24000
  • 建设项目管理是什么

    建设项目管理是指在项目建造过程中,依据特定的目标和限制条件,对资源进行有效配置和调配,运用系统化、科学化的管理原理和方法,确保项目按期、质量、成本目标的实现。主要内容包括:1、项目策划与初始阶段管理、2、项目设计与计划、3、资源调配与施工管理、4、风险控制与合同管理、5、项目交付与后期维护。 特别地…

    2024年1月8日
    22900
  • 项目经理如何做质量管理

    项目经理在做质量管理时,需要采取一系列的策略和工具,以确保项目充分满足既定的质量标准与客户期望。明确质量标准、组织质量保证活动、实施质量控制是项目经理质量管理的三大核心环节。特别是明确质量标准,这是质量管理的基石,它涉及到定义项目与结果物必须满足的标准与性能要求,确保所有项目成员有着共同的理解和目标…

    2024年4月11日
    7300
  • devops是什么缩写

    DEVOPS之先导:探寻背后的缩写含义。本篇旨在透彻分析DevOps这一术语的构成、起源、及其在现代软件开发和运维中的重要性。DevOps,一词涵盖了1、开发(Development)与2、运维(Operations)两大领域的融合。其核心,在于贯穿软件交付的全周期,旨在促进开发与运维的无缝协作,加…

    2024年3月26日
    5900
  • DevOps如何处理大规模项目

    DevOps在处理大规模项目时应遵循以下几个核心步骤:1、采纳微服务架构提供灵活性与可拓展性;2、持续集成和持续交付(CI/CD)实现自动化流水线;3、基础设施即代码(IaC)便于管理和自动化部署;4、容器化与编排工具以及5、监控和日志管理以确保系统健康和及时反馈。 微服务架构 的采用是处理大规模项…

    2024年1月18日
    19200
  • 为什么在vscode运行很慢

    对于为什么在Visual Studio Code (VSCode)中运行变得很慢,主因通常归结于几个方面:系统资源不足、大量扩展的安装与运行、工作区问题、及配置不当。扩展安装和管理不善是特别常见的问题。扩展功能虽然丰富VSCode的使用体验,但不加选择地安装大量扩展会消耗更多系统资源,尤其是那些会频…

    2024年4月3日
    11100

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部