多线程概要《记录》

问题的提出

新建一个基于对话框的应用程序,在主对话框添加一个按钮,标题为“延时6秒”,添加按钮的响应函数,代码如下:

void XXXDlg::OnSleepSixSecond() 
{
   Sleep(6000); //延时6秒
}

编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。

多线程概述

进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。

多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。

时间: 2024-10-11 11:34:22

多线程概要《记录》的相关文章

Java多线程——异常记录

Java多线程——异常记录 摘要:本文主要介绍了Java多线程中遇到的奇怪的异常. 部分内容来自以下博客: https://blog.csdn.net/historyasamirror/article/details/6709693 java.lang.IllegalMonitorStateException 在测试多线程通信的代码时,出现了这个异常. 代码如下: 1 public class Demo { 2 public static void main(String[] args) { 3

关于php多线程的记录

最近需要对3W台服务器进行下发脚本,如果一个一个执行,时间大约在2个小时,特别的慢,于是修改程序,采用php的多线程去分发,大概在10分钟左右完成,下面记录下这次的经验和理解: 我所理解的php的多线程实现的方式有两种,下面是官方的介绍: 1.官方的介绍:(转载自张宴的博客) 到php5.3以上的版本,php才算是真正的支持多线程,使用的是pthreads的扩展,php在处理多个循环的任务的时候,能够大大的缩短程序的执行时间. 大多数网站的性能瓶颈,不在php的服务器上,而是在mysql服务器上

python多线程学习记录

1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start(),启动线程 t.join(),阻塞当前线程,即使得在当前线程结束时,不会退出.会等到子线程结束之后才退出. 如果不加join语句,主线程不会等到子线程结束才结束,但却不会立即杀死该线程. 但是如果添加了SetDaemon(True),如果不加join,则会在主线程结束后马上杀死子线程. 如果join

【多线程学习记录一(1)】创建java多线程

1)java多线程的创建方式有三种: 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 第一种: 1 //继承Thread类 2 class ExtendsThread extends Thread{ 3 public void run(){ 4 //do your stuff 5 } 6 } 7 ExtendsThread e = new ExtendsThread(); 8 e.start(); 第二种: 1 //实现Runnable接口 2 class I

【多线程学习记录一(2)】继承Thread类和实现Runnable接口、Callable接口的区别

1)Runnable和Callable同是接口 * Callable的任务执行后可返回值,而Runnable的任务是不能返回值(是void);call方法可以抛出异常,run方法不可以 * 运行Callable任务可以拿到一个Future对象,表示异步计算的结果.它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果.通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果. * 加入线程池运行,Runnable使用ExecutorService的execute方

GCD 多线程 ---的记录 iOS

先写一个GCD static UserInfoVoModel *userInfoShare = nil; +(instancetype)shareUserInfoVoModel { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ userInfoShare = [[UserInfoVoModel alloc] init]; }); return userInfoShare; }

【windows】Github 入门概要

一.概要 Github是开源代码库以及版本控制的系统.越用越好用,github上有很多高质量的工程和代码,随时可以fork+clone 来研究.有时间和能力还可以 pull request 贡献代码!最近要经常用到github,觉得是开发者的必备,整理这篇文章,希望想了解github的人有所帮助!本文概要记录github的使用.github的详细教程和介绍可以参考此篇文章[git教程].文章很详细很适合入门. 如果电脑上没有安装gitHub的,可以在gitHub for windows 下载安装

C# 面向切面编程--监控日志记录方案

背景:现在公司整体在做监控平台,要求把各个部分的细节都记录下来,在前台页面上有所显示,所以现在需要做的就是一个监控日志的记录工作,今天讲的就是渲染监控日志的例子. 现状:当前的渲染程序没有为监控日志记录预留代码接入口,因此要新增加监控日志势必要增加新的代码.但是如果只是单单在已有逻辑中新增日志记录的代码似乎不太合理:因为记录日志的代码很多都是一样的,直接插入代码有很多重复代码:原有代码已经上线并且运行良好,新增代码会破坏原有封装,甚至增加出错的可能:再者从设计的角度来说,记录日志不属于任何一个功

阿里云ECS服务器折腾记(一):小白入门遇到的各类问题

上周日折腾了一次阿里云服务器,被linux的网络问题折腾的够呛.在这里简单做个问题的概要记录,以备忘.题目中说自己是小白,其实也不完全是小白,自己对一些linux的常用命令还是有所了解的,但是对于linux系统缺乏一个整体的把握和掌控能力,下面简单总结下上周日折腾的一些事情. 1,让ssh登录变的更加安全 (1)最不安全的方法:直接ssh [email protected]地址,然后提示你输入密码,登录成功.也就是以root身份以密码验证的方式登录,这种方式恐怕是最不安全的.不安全的原因:密码可