单线程和多线程区别

通常多线程的应用不是为了提高运行效率,而是为了提高资源使用效率。比如你的应用程序需要访问网络,因为网络有延时,如果在界面线程访问,那么在网络访问期间界面将无法响应用户消息,这是就应该使用多线程。         如果是单CPU,而且程序使用的资源仅仅是在内存和CPU,从运行指令上比较肯定单线程要比多线程精简;时间的话,理想状况可以认为单线程要比多线程时间短,但是实际情况很难讲,因为Windows下是多任务的,每一时刻CPU的使用情况都有不同;程序代码经过编译器编译也可能是优化过的;CPU对Cache的命中率也是随机的。所以精确的比较其实很难实现。

个人理解         单线程,的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。

多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息   花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。   而如果用多线程就可以在等待期间   加入其他的搜索,然后等待,这样可以提高效率。         不过多线程和多进程公用一些资源时要考虑的问题好像也是一样的,,对于一些公共资源或者公共变量的访问和修改时要注意特别的,   需要一些锁定什么的,还有顺序问题的考虑。         比如写游戏,一开始想来,用多线程蛮好的,   一个敌人一个线程让他自己单独运行,可以增加灵活性和随机性还有速度会快些?   其实不然,   一方面线程多了   速度会变得很慢,   另一方面由于线程切换和执行的不确定性,会使结果变得乱七八糟,跳来跳去的感觉,特别是一些碰撞判断时会莫名其妙。   (我没试过,以前听人说试过)   。   其实处理这些东西用一个流程下来顺次处理主角、敌人、碰撞判断、绘图,速度方面不会怎么慢,而且一些变量判断方面不会错位。         说了半天,也没具体说出些什么,不好意思。

如果你学过操作系统,应该用好理解一点,线程的同步问题呵呵。。

时间: 2024-08-25 00:55:56

单线程和多线程区别的相关文章

单线程 及 多线程 详解

这篇文章写得好好:https://blog.csdn.net/cherrycheng_/article/details/51384657 以下内容来自另一篇文章: 1.多线程的作用(多核处理器) 多线程常用语避免用户等待,提高相应速度,增强用户体验.在这种场合下,对提高整体运算速度的作用不大. 比如,客户端APP中,需要下载一些数据的同时又能让用户继续操作,这时候再开一个线程来下载数据是常见的选择. 2.单线程 和 多线程 的区别和联系 大家都知道工厂"流水线"作业,里面的工序是一环扣

JavaScript是单线程还是多线程(转)

多线程要考虑线程之间的资源抢占,死锁,冲突之类一系列问题.JavaScript作为一门客户端脚本,貌似没有多线程的一些列问题.那么JavaScript是单线程还是多线程?通过查资料总结了JavaScript运行的原理.如下: 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. JavaScript的单线程,与它的用途有关.作为浏览器脚本语言,JavaScri

单线程、多线程、多进程、协程比较,以爬取新浪军事历史为例

演示python单线程.多线程.多进程.协程 1 import requests,json,random 2 import re,threading,time 3 from lxml import etree 4 5 lock=threading.Lock() 6 semaphore=threading.Semaphore(100) ###每次限制只能100线程 7 8 user_agent_list = [ 9 "Mozilla/5.0 (Windows NT 6.1; WOW64) Appl

Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题

本文主要内容 弹出式线程(Pop-up threads) 使单线程代码多线程化会产生那些问题 一.弹出式线程(Pop-up threads) 以在一个http到达之后一个Service的处理为例子来介绍弹出式线程. 上面的例子中传统的做法有可能是在Service中有一个线程一直在等待request的到达,等request到达后这个线程会开始检查请求最后在进行处理.当这个线程在处理request的时候,后面来的request会被block,一直到线程处理完当前request为止.如下图所示. 弹出

sevlet是单线程还是多线程,在多线程下如何编写安全的servlet程序

sevlet是单线程还是多线程,在多线程下如何编写安全的servlet程序 首先明确:Servlet是单实例的,即对于同一种业务请求只有一个是实例.不同的业务请求可以通过分发来产生多个实例.其次:单实例的原因我想是因为单实例足可以处理某一个请求,就像ibatis的Querydao.UpdateDao一样都是单实例的.再次:为什么单实例足可以处理某一个请求,因为Servlet是单实例多线程的.http://hiyachen.cublog.cn  [email protected]先看一段代码:pa

java归并排序,单线程vs多线程

一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子数组递归排序,然后把这两个排好序的子数组合并为一个有序数组.下面是归并排序的例子图解: 二.单线程实现归并排序 package com.bob.algorithms.sort; import java.util.Arrays; import com.bob.algorithms.SortStrate

单线程和多线程执行对比—Python多线程编程

单线程和多线程执行对比 本章使用递归求斐波那契.阶乘与累加函数的执行来对比单线程与多线程: 斐波那契.阶乘与累加(mtfacfib.py): ? 1 import threading 2 from time import sleep, ctime 3 ? 4 class MyThread(threading.Thread): 5 def __init__(self, func, args, name=''): 6 threading.Thread.__init__(self) 7 self.na

Spring Boot 定时任务单线程和多线程

Spring Boot 的定时任务: 第一种:把参数配置到.properties文件中: 代码: package com.accord.task; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * 从配置

进程、单线程和多线程

进程:如QQ.exe,LOL.exe等都是进程,也就是APP就是一个进程. 单线程:代码按调用顺序往下执行,没有出现两段代码交替运行: 多线程:代码可以交替运行,线程之间并发运行,每个线程是独立的. 多线程的应用:比如下载文件.应用等,就是同时开几条线程去下载,所以速度快很多. 进程和线程的区别:进程至少有一个或以上线程:线程存活在进程中:进程死亡,线程也全部死亡:线程死亡,进程不一定死亡.