精华内容
下载资源
问答
  • 单线程 多线程

    2019-07-02 09:06:25
    单线程 缺点: 系统的利用率非常低 尤其 对外部设备进行操作的时候,系统处理器都在等待。 当初 做单片机的时候 必须创建一个线程任务 去指挥舵机 转动。 关于并行架构: 要同时执行条指令 必须具有个处理器...

    单线程 缺点:
    系统的利用率非常低 尤其 对外部设备进行操作的时候,系统处理器都在等待。
    当初 做单片机的时候 必须创建一个线程任务 去指挥舵机 转动。

    关于并行架构:
    要同时执行多条指令 必须具有多个多个处理器 或者处理部件 这就是并行结构。

    并发执行: 是 让多道程序在计算机中交替执行

    展开全文
  • 单线程与多线程

    千次阅读 2013-06-18 19:33:47
    多线程的目的是是提高速度,而是同时可以执行多个功能,我觉得速度相对会变慢一些,如下小案例: 输出数字字符串,用控制台应用程序实验: 单线程: using System; using System.Collections.Generic; using ...

    多线程的目的是是提高速度,而是同时可以执行多个功能,我觉得速度相对会变慢一些,如下小案例:

    输出数字与字符串,用控制台应用程序实验:

    单线程:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Threading;


    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //单线程
                Stopwatch watch = new Stopwatch();
                watch.Start();
                PrintNumb();
                PrintStr();
                watch.Stop();
                Console.WriteLine(watch.Elapsed.TotalMilliseconds);
                Console.ReadKey();
            }


            private static void PrintNumb()
            {
                for (int i = 0; i < 1000; i++)
                {
                    Console.WriteLine(i);
                }
            }


            private static void PrintStr()
            {
                for (int i = 0; i < 1000; i++)
                {
                    Console.WriteLine("您输出的是:"+i.ToString());
                }
            }
        }
    }

    多线程:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Threading;


    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //双线程
                ThreadStart sprintnum = new ThreadStart(PrintNumb);
                Thread tnum = new Thread(sprintnum);
                ThreadStart tprintstr = new ThreadStart(PrintStr);
                Thread tntstr = new Thread(tprintstr);


                Stopwatch watch = new Stopwatch();
                watch.Start();
                tnum.Start();
                tntstr.Start();
                while (true)
                {
                    if (tnum.ThreadState==System.Threading.ThreadState.Stopped&&tntstr.ThreadState==System.Threading.ThreadState.Stopped)
                    {
                        watch.Stop();
                        Console.WriteLine(watch.Elapsed.TotalMilliseconds);
                        break;
                    }
                }
                Console.ReadKey();
            }


            private static void PrintNumb()
            {
                for (int i = 0; i < 1000; i++)
                {
                    Console.WriteLine(i);
                }
            }


            private static void PrintStr()
            {
                for (int i = 0; i < 1000; i++)
                {
                    Console.WriteLine("您输出的是:"+i.ToString());
                }
            }
        }
    }

    展开全文
  • C#单线程与多线程实例体现出单线程与多线程的区别
  • 本篇文章通过代码实例给大家详细讲述了Java单线程与多线程的相关原理和知识点总结,需要的朋友可以学习下。
  • 主要介绍了C#程序中的单线程与多线程设计的简单对比,通过实际的代码演示可以清晰看出多线程并发来避免单线程阻塞问题的特点,需要的朋友可以参考下
  • 单线程与多线程的区别
                   

    什么是进程?
    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。
    而一个进程又是由多个线程所组成的。


    什么是线程?
    线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,
    即不同的线程可以执行同样的函数。


    什么是多线程?
    多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,
    也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。


    多线程的好处:
    可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,
    这样就大大提高了程序的效率。 


    多线程的不利方面:
    线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 
    多线程需要协调和管理,所以需要CPU时间跟踪线程; 
    线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
    线程太多会导致控制太复杂,最终可能造成很多Bug;


    多线程与单线程的区别
    生活举例
    你早上上班,正要打卡的时候,手机响了。。你如果先接了电话,等接完了,在打卡,就是单线程。
    如果你一手接电话,一手打卡。就是多线程。
    2件事的结果是一样的。。你接了电话且打了卡。


    多线程处理的优点

    同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。多线程处理可以同时运行多个过程。例如,文字处理器应用程序在您处理文档的同时,可以检查拼写(作为单独的任务)。由于多线程应用程序将程序划分成独立的任务,因此可以在以下方面显著提高性能: 
    多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。 
    当前没有进行处理的任务可以将处理器时间让给其他任务。 
    占用大量处理时间的任务可以定期将处理器时间让给其他任务。 
    可以随时停止任务。 
    可以分别设置各个任务的优先级以优化性能。 

    是否需要创建多线程应用程序取决于多个因素。在以下情况下,最适合采用多线程处理:
    耗时或大量占用处理器的任务阻塞用户界面操作。 
    各个任务必须等待外部资源(如远程文件或 INTERNET 连接)。 

    例如,用于跟踪 WEB 页上的链接并下载满足特定条件的文件的 INTERNET 应用程序“ROBOT”。这种应用程序可以依次同步下载各个文件,也可以使用多线程同时下载多个文件。多线程方法比同步方法的效率高很多,因为即使在某些线程中远程 WEB 服务器的响应非常慢,也可以下载文件。

    下面是多线程的例子
    还在DOS时代,人们就在寻求一种多任务的实现。于是出现了TSR类型的后台驻留程序,比较有代表性的有SIDE KICK、VSAFE等优秀的TSR程序,这类程序的出现和应用确实给用户使用计算机带来了极大的方便,比如SIDE KICK,们编程可以在不用进编辑程序的状态下,一边编辑源程序,一边编译运行,非常方便。但是,DOS单任务操作系统的致命缺陷注定了在DOS下不可能开发出真正的多任务程序。进入WINDOWS3.1时代,这种情况依然没有根本的改变,一次应用只能做一件事。比如数据库查询,除非应用编得很好,在查询期间整个系统将不响应用户的输入。
     进入了WINDOWS NT和WINDOWS 9X时代,情况就有了彻底的改观,操作系统从真正意义上实现了多任务(严格地说,WIN9X还算不上)。一个应用程序,在需要的时候可以有许多个执行线程,每个线程就是一个小的执行程序,操作系统自动使各个线程共享CPU资源,确保任一线程都不能使系统死锁。这样,在编程的时候,可以把费时间的任务移到后台,在前台用另一个线程接受用户的输入。对那些对实时性要求比较高的编程任务,如网络客户服务、串行通信等应用时,多线程的实现无疑大大地增强了程序的可用性和稳固性。

    ----------------------------------------------------------------------------------------------------------------------------------

    1。单进程单线程:一个人在一个桌子上吃菜。
    2。单进程多线程:多个人在同一个桌子上一起吃菜。
    3。多进程单线程:多个人每个人在自己的桌子上吃菜。

    多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了。。。此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。


    1。对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。


    2。对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。

    --
    补充:有人对这个开桌子的开销很有兴趣。我把这个问题推广说开一下。

    开桌子的意思是指创建进程。开销这里主要指的是时间开销。
    可以做个实验:创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。在我机器上的测试结果是:      
    UbuntuLinux:耗时 0.8 秒      
    Windows7:耗时 79.8 秒       
    两者开销大约相差一百倍。

    这意味着,在 Windows 中,进程创建的开销不容忽视。换句话说就是,Windows 编程中不建议你创建进程,如果你的程序架构需要大量创建进程,那么最好是切换到 Linux 系统。

    大量创建进程的典型例子有两个,一个是 gnu autotools 工具链,用于编译很多开源代码的,他们在 Windows 下编译速度会很慢,因此软件开发人员最好是避免使用 Windows。另一个是服务器,某些服务器框架依靠大量创建进程来干活,甚至是对每个用户请求就创建一个进程,这些服务器在 Windows 下运行的效率就会很差。这"可能"也是放眼全世界范围,Linux  服务器远远多于 Windows 服务器的原因。

    --
    再次补充:如果你是写服务器端应用的,其实在现在的网络服务模型下,开桌子的开销是可以忽略不计的,因为现在一般流行的是按照 CPU 核心数量开进程或者线程,开完之后在数量上一直保持,进程与线程内部使用协程或者异步通信来处理多个并发连接,因而开进程与开线程的开销可以忽略了。

    另外一种新的开销被提上日程:核心切换开销。

    现代的体系,一般 CPU 会有多个核心,而多个核心可以同时运行多个不同的线程或者进程。

    当每个 CPU 核心运行一个进程的时候,由于每个进程的资源都独立,所以 CPU 核心之间切换的时候无需考虑上下文。

    当每个 CPU 核心运行一个线程的时候,由于每个线程需要共享资源,所以这些资源必须从 CPU 的一个核心被复制到另外一个核心,才能继续运算,这占用了额外的开销。换句话说,在 CPU 为多核的情况下,多线程在性能上不如多进程。

    因而,当前面向多核的服务器端编程中,需要习惯多进程而非多线程。
    ----------------------------------------------------------------------------------------------------------------------------------

    很多人答案说的是操作系统提供的多进程而不是单个程序内的多线程。    

    多线程使得程序内部可以分出多个线程来做多件事情,而不会造成程序界面卡死。比如迅雷等多线程下载工具就是典型的多线程。一个下载任务进来,迅雷把文件平分成10份,然后开10个线程分别下载。这时主界面是一个单独的线程,并不会因为下载文件而卡死。而且主线程可以控制下属线程,比如某个线程下载缓慢甚至停止,主线程可以把它强行关掉并重启另外一个线程。    

    另外就是一些程序的打印功能,比如记事本、Adobe Reader,打印的时候就只能打印,无法在主界面进行操作,而Word就有“后台打印”的功能,点了打印命令之后,还可以回到主界面进行修改、保存等操作。    

    另外多线程除了并行完成一些任务以外,还有生产者-消费者模式。比如Windows命令行下在某个硬盘根目录执行一个"dir/s | more"命令,前一条显示硬盘里的所有文件,要执行很久才能执行得完,后面那条命令会把前面命令的输出分屏显示出来。但是执行整条命令时,会立刻有显示,也就是说,前面一条命令输出满一页内容到缓冲区,more命令就把缓冲区封死了,等用户敲了一个键显示下一屏的时候,more命令把缓冲区的内容取出并清空,前面的命令才能输出下一屏到缓冲区。这样的多线程使得整条命令不用等待前面的命令全部执行完才能执行下一条命令。   

    多线程和多进程的区别。平常指的多进程是操作系统下同时运行多个进程,比如Word和Excel同时打开,并且可以并行地同时执行一些操作。这种多进程和多线程没什么好比较的。可以比较的是同一个程序里的多线程和多进程。   

    多线程因为在同一个进程里,所以可以共享内存和其他资源,比如迅雷里10个线程一齐下载一个文件,这个文件是由进程打开的,然后10个线程都可以往里写入东西。如果是10个进程就不行了,操作系统不允许一个文件由两个进程同时写入。另外,Chrome就是一个典型的多进程程序,里面每个标签页、扩展、插件都是单独的进程,各自独占资源,相互隔离,一个进程出错死掉只会影响一个页面或者插件,再也不会出现Flash插件出错崩溃导致整个浏览器崩溃的情况了。

               
    展开全文
  • 主要介绍了.NET Framework中定时器timer的单线程与多线程使用讲解,单线程定时器在性能方面不如多线程,但是可以做到线程安全,需要的朋友可以参考下
  • 资源介绍:json解析的单线程与多线程操作实例,源码非常的简单,多线程是调用了鱼刺的多线程模块。资源作者:
  • 文章目录1 单线程与多线程网络程序架构简介1.1 服务端单线程处理多客户端1.2 服务端多进程多端口处理多客户端1.3 服务端多线程单端口分组处理多客户端1.4 服务端多线程多端口分组处理多客户端 1 单线程与多线程网络...

    1 单线程与多线程网络程序架构简介

    1.1 服务端单线程处理多客户端

    在这里插入图片描述

    1.2 服务端多进程多端口处理多客户端

    在这里插入图片描述

    1.3 服务端多线程单端口分组处理多客户端

    在这里插入图片描述
    简单处理流程如下:
    在这里插入图片描述

    1.4 服务端多线程多端口分组处理多客户端

    在这里插入图片描述


    参考资料:

    1. C++ 百万并发网络通信引擎架构与实现 (服务端、客户端、跨平台) Version 1.0
    展开全文
  • 线程:每一个任务称为一个线程,线程不能独立的存在,...多线程:同时运行一个以上线程的程序称为多线程程序,多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。单线程代码例子:public class Single...
  • 并发与并行,同步与异步,单线程与多线程1. 并发与并行1.1 并发(concurrent)1.2 并行(parallel)2. 同步与异步3. 单线程与多线程4. 异步与多线程 1. 并发与并行 1.1 并发(concurrent) 一段时间内有多个程序需要执行...
  • 最近一直在学习爬虫的相关知识,目前学习到了单线程多线程这一块,把自己的学习经历分享出来顺便也做个笔记。一.单线程操作单线程操作就是我们日常写代码时的操作,为了比较出和多线程的区别,以下为其对比。#使用...
  • 大文件上传-单线程与多线程

    千次阅读 2017-06-10 15:32:19
    大文件上传-单线程与多线程
  • 记录一下单线程与多线程处理性能的比较 1、单线程 1 import java.util.LinkedList; 2 3 public class TrainBooking2 { 4 5 public static void main(String[] args) { 6 long startTime = System....
  • 线程:每一个任务称为一个线程,线程不能独立的存在,...多线程:同时运行一个以上线程的程序称为多线程程序,多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。单线程代码例子:public class Single...
  • Python单线程与多线程

    2021-01-07 12:04:25
    最近一直在学习爬虫的相关知识,目前学习到了单线程多线程这一块,把自己的学习经历分享出来顺便也做个笔记。 一.单线程操作 单线程操作就是我们日常写代码时的操作,为了比较出和多线程的区别,以下为其对比。 #...
  • 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。...多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务, 也...
  • 单线程与多线程介绍

    2020-02-08 21:31:12
    简单的说,单线程就是进程中只有一个线程。单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。 以上是main方法,是一个主线程。 多线程 由一个或者多个线程组成的程序就是...
  • 1.单线程与多线程:js是单线程,因为如果js 是多线程语言,那么当一个线程创建dom元素,另一个线程删除dom元素就会冲突。 让js实现多线程的方法是HTML5的新标准web worker。 2.同步与异步:异步就是js不需要等待事件...
  • Java实现文件拷贝(单线程与多线程) 将一个文件拷贝到另一个文件目录下,单线程实现涉及到文件IO的知识,下面是我写的源代码: import java.io.IOException; import java.io.RandomAccessFile; public class ...
  • 二、Javascript是单线程的 1.异步Ajax也是单线程的 2.setInterval和setTimeout本质上并不是多线程 三、Web Worker支持多线程 1.多线程间数据交互 2.Web Worker的兼容性 3.Web Worker的使用限制 3.1同源限制 ...
  • Java单线程与多线程

    千次阅读 2019-03-08 18:17:52
    在我们了解单线程多线程之前,我们必须搞清楚什么是进程。 一个运行起来的程序就是一个进程! 那程序又是什么呢? 对程序的通俗定义就是:一段可执行的代码。 当我们执行一段Java程序时,就在java虚拟机(JVM)中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,828
精华内容 5,931
关键字:

单线程与多线程