`
dmh920
  • 浏览: 18533 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

多线程的理解

 
阅读更多

      前段时间看了操作系统线程那章,对多线程有了新的认识,重新思考了多线程在开发中的使用。
      为什么要使用多线程,多线程编程的目的就是最大限度地利用CPU资源,当某一线程在等待I/O等资源操作完成出现阻塞时,让其它需要占用CPU资源的线程有机会获得CPU资源。多进程技术同样也可以做到这一点,但是创建一个进程开销太大,进程间通信不方便,加上进程切换时间太长,所以导致了多线程(线程也称为轻量级进程)的出现。
      对于单核CPU来说,在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程(进程至少有一个主线程)或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略切换其他线程执行。但是这种线程间的切换是有cpu开销的,而这种开销对于任务来说是无效的。同时在同一进程内的所有线程是可以共享的资源,在多线程中还需考虑资源共享、数据独占、互斥量等一系列问题。所以两个线程执行完成一个任务(每个线程完成一个)所需要的时间比一个线程执行完成两次所需要的时间要多一些(多的时间发生在线程间切换开销上)。所以采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间,因为时间片很短,这样给用户的感觉是有多个线程在同时执行。
      所以对于有慢速I/O访问需求的应用程序,多线程要优于单线程。最典型的情况就是数据库请求处理这块,可以采用N个DB线程,一个逻辑线程的架构。而对于主要消耗CPU运算资源的业务逻辑应用程序,尽量采用单线程,这样能更大发挥cpu的运算能力。

5
6
分享到:
评论
5 楼 dmh920 2012-09-18  
gfdice 写道
跪了,这也能上javaeye首页?二本大一的人都知道的事情。

怎么说呢,大学生计算机专业的童鞋是应该都要知道这些东西,当时在学校的时候我也知道,但是没有去深究,但是在实际工作中遇到使用多线程的时候才发现这些并不是仅仅是自己以前理解的那样。在实际项目中我们业务逻辑服务器是采用单线程实现的,尽量避免添加新的线程,如果有新功能要上而单线程实在是满足不了需求的时候才考虑添加新的线程,而用户数据服务器却是开了好几条线程与db交互,另外db对I/O性能比cpu要求更高。这些都是以前也看到过,也听别人说过,但那也是走马观花自己体会不深。自己经历了重新回过头来看一次,再结合实际情况又有了新的体会,更深层次的领悟。
4 楼 lazy_ 2012-09-18  
虽然简短,但是总结的很好! 
3 楼 gfdice 2012-09-18  
跪了,这也能上javaeye首页?二本大一的人都知道的事情。
2 楼 完善自我 2012-09-18  
讲到了重点,挺好!
1 楼 yangy608 2012-09-17  
这也能上首页?javaeye自从被收购后,这水平是直线下降啊,马上估计就没人来了

相关推荐

    IOS多线程理解

    iOS多线程是移动应用开发中不可或缺的技术,它允许程序在后台执行耗时任务,同时保持主线程的流畅,从而提供良好的用户体验。本文将深入探讨iOS的三种主要多线程编程方式:NSThread、NSOperation和NSOperationQueue...

    多线程最完整的思维导图

    此外,线程的状态转换也是多线程理解的重要部分。从新建到运行,再到阻塞、等待、终止,线程经历了多个状态,了解这些状态有助于调试和优化多线程程序。 最后,线程安全的集合类是多线程编程中必不可少的工具。例如...

    C#语言多线程初步理解

    本教程将帮助初学者理解C#中的多线程概念,并通过一个Windows Forms应用程序实例,演示如何在WinForm控件中启动、暂停、继续子线程以及输出数据。 首先,我们来看多线程的基本概念。在单线程程序中,所有的任务按...

    多线程thread线程的理解

    在学习多线程时,我们需要理解以下几个核心概念: 1. **线程的创建**:程序可以通过创建`Thread`对象并调用其`start()`方法来启动一个新线程。在Java中,还可以通过实现`Runnable`接口或继承`Thread`类来创建线程。...

    易语言多线程传递多参数

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在易语言中,它能有效提升程序的执行效率。...对于易语言的学习者来说,研究这个源码将是一个宝贵的实践机会,可以加深对多线程编程的理解。

    多线程_按键精灵经典多线程操作_

    理解多线程的基本原理和实践方法,有助于开发者在各种场景下实现更高效的自动化解决方案。 在压缩包文件“多线程.Q”中,很可能包含了一个或多个人工编写的具体多线程按键精灵脚本示例,可能包括线程的创建、线程间...

    C#多线程互斥实例 多线程获取同一变量

    首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统分配CPU时间的基本单位,每个线程都有自己的执行路径,它们可以并行或交替执行。 2. **共享资源**:在多线程环境中,多个线程可能需要...

    鱼刺多线程注册源码例子(鱼刺多线程稳定框架)

    "鱼刺多线程注册源码例子"是一个基于"鱼刺多线程稳定框架"的编程实践,旨在展示如何在软件开发中有效地...通过分析和实践"鱼刺多线程注册源码",不仅可以提高对多线程编程的理解,还能为以后的项目提供宝贵的实践经验。

    深入理解Python 多线程

    Python里的多线程是假的多线程,不管有多少核,同一时间只能在一个核中进行操作!利用Python的多线程,只是利用CPU上下文切换的优势,看上去像是并发,其实只是个单线程,所以说他是假的单线程。 那么什么时候用多...

    易语言源码多线程类源码.rar

    易语言是一种专为中国人设计的编程语言,它以简明的中文语法,降低了编程的门槛,使得更多非专业背景的用户也能快速上手编程。...通过研究这些内容,可以深入理解易语言的线程机制,并掌握如何在实践中应用多线程技术。

    多线程框架通用多线程源码.zip

    《深入理解易语言版多线程通用框架》 在计算机编程中,多线程是一种并发执行任务的技术,它允许多个任务在同一时间内运行,从而提高了系统资源的利用率和程序的响应速度。尤其在易语言这样的高级编程环境中,多线程...

    多线程基础与基于多线程的简单聊天室

    本压缩包“多线程基础与基于多线程的简单聊天室”提供了对多线程技术的实践理解和二次开发的基础。以下是关于这个主题的详细知识点: 1. **多线程的概念**:多线程是指在一个程序中同时执行多个不同的线程,每个...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    这些实例不仅覆盖了多线程的基础应用,还涉及到高级的并发控制和同步技术,对于理解和掌握C#.NET中的多线程编程有极大的帮助。通过分析和运行这些实例,开发者可以深入理解多线程在实际项目中的运用,提升解决问题的...

    Linux下C语言多线程编程实例

    Linux 下 C 语言多线程编程实例 Linux 下的多线程编程是一种非常重要的技术,在...本实例提供了一个非常实用的多线程编程示例,帮助我们更好地理解多线程编程的基本概念和技术,并且可以作为实际应用的参考和借鉴。

    易语言多线程访问网页

    通过学习以上知识点,并结合提供的“多线程访问网页源码”,开发者可以理解并掌握如何在易语言环境下编写多线程网络应用,提高程序的并发性能,提升用户体验。实践过程中,不断调试和优化代码,将有助于深化对易语言...

    .NET多线程实例

    总之,这个.NET 2.0的多线程实例涵盖了多线程的创建与管理、线程同步、UI更新、文件系统操作、异步编程等多个核心知识点,对于理解和实践.NET环境下的并发编程具有很高的价值。通过学习和实践这些示例,开发者可以...

    C# 多线程实例多线程实例多线程实例

    本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多线程允许一个应用程序同时执行多个任务,每个任务都在一个独立的线程上运行。C#中,我们可以通过System....

    C#多线程读写sqlite

    在C#编程中,多线程技术常用于...总结来说,理解和掌握这些知识点对于在C#中高效且安全地实现多线程读写SQLite数据库至关重要。通过合理利用多线程并正确实施同步策略,可以提高应用程序的并发性能,同时避免数据错误。

    单线程与多线程的区别

    理解这两种模型是编程尤其是服务器端开发的基础,尤其是在Java、C#等支持多线程的编程语言中。 首先,让我们来详细探讨一下**单线程**的概念。在单线程环境中,程序的执行是由一个单一的执行线程控制的,这意味着...

Global site tag (gtag.js) - Google Analytics