线程

如何理解:程序、进程、线程、并发、并行、高并发?

回眸只為那壹抹淺笑 提交于 2020-03-22 00:29:24
问题: 如何理解:程序、进程、线程、并发、并行、高并发? 作者:大宽宽 链接:https://www.zhihu.com/question/307100151/answer/894486042 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在这里你可以了解: 为啥大家说的进程的意思有出入? 为啥并发那么难理解? 为啥高并发不仅仅是“高”+“并发”的意思? 为啥这些概念到了现实当中就不一样了? 进程,和另一种进程   假如你想铺一条长1000m,宽50m的路。为了解决这个问题,你先构想出来假如你自己1个人做,整个过程第一步干什么,第二步干什么等等。这个干活的过程,可以被称作一个【进程】(Process),或者你可以理解为“一个做事的办法/步骤/方案“。进程的英文Process本意就是“过程”的意思,是一个抽象的概念。这个活有没有真得干并不重要,重要的是你已经预先想好了这个活该怎么干, 有了一个可行思路 。注意,这里【进程】仅仅是描述这个方案的。至于这个方案是在脑海里,还是已经被执行了,是不重要的。   把这套铺路的方案用纸张写出来就得到一个【程序】。在软件开发中也是如此,只不过用的不是纸笔,而是键盘+存储器+某种编程语言。   当然,大家更加熟知的进程往往指的是另外一个意思,是指“程序在操作系统中运行的实例“。所谓“实例

JavaSE:多线程

有些话、适合烂在心里 提交于 2020-03-22 00:03:01
  线程的概述   线程是一个在进程基础上发展起来的概念,引入它是为了提高系统的并发执行程度,进一步减少时间和空间的开销。 一、线程不能独立存在,必须存在于某个进程中。 二、同一进程内的线程都可以访问进程的所有资源,因此线程之间的通信比进程之间的通信要方便得多。 三、同一进程内的线程切换也比进程方便。 四、线程必须被系统调度而获得CPU使用权后才能运行,所以线程的执行顺序不是由程序本身控制的,而是由系统调度决定的。   线程的创建方式   一、继承Thread类并重写run()方法。 class Pig extends Thread { public Pig(String threadName) { super(threadName); } public void run() { System.out.println("执行线程代码"); } public static void main(String[] args) { Pig pig1 = new Pig("线程1"); Pig pig2 = new Pig("线程2"); pig1.start(); pig2.start(); System.out.println("当前线程的线程组中活动线程的数目:"+pig1.activeCount()); } } 二、实现Runnable接口并实现run()方法。 class Pig

解决ASP.NET上传文件大小限制

自古美人都是妖i 提交于 2020-03-21 23:34:16
第一种方法,主要适用于IIS6.0版本 一、修改配置Web.Config文件中的httpRuntime节点 对于asp.net,默认只允许上传4M文件,增加如下配置,一般可以自定义最大文件大小. 一、修改配置Web.Config文件中的httpRuntime节点 对于asp.net,默认只允许上传4M文件,增加如下配置,一般可以自定义最大文件大小. <httpRuntime executionTimeout="800" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/> //executionTimeout预设(即默认)是 90 秒 //可以修改:executionTimeout = "180" Asp.net支持的最大上传文件大小 在web.config中配置: 配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。 <configuration> <system.web> <httpRuntime> <httpRuntime useFullyQualifiedRedirectUrl="true|false" maxRequestLength="size in kbytes" executionTimeout="seconds" minFreeThreads=

java多线程(1) 线程的基本概念

不问归期 提交于 2020-03-21 23:02:33
一、线程的基本概念:                         线程是一个程序里面不同的执行路径。 程序里面不同的执行路径,每一个分支都是一个线程。 进程:静态的概念。机器上的一个class文件,机器上的一个exe文件,这叫一个进程。 机器里面实际上运行的都是线程。 window等。linux等都是多进程,多线程的系统。 CPU的执行是这样的: CPU速度比较快,一秒钟算好几亿次,它把自己的时间分成一个一个的小时间片,这个时间片我执行你一会,再执行他一会,虽然有几十个线程, 没关系,执行这个一会,执行那个一会,挨着排的都执行一遍,但是对我们人来说,因为它速度太快了,你看起来就好像好多线程在同时执行一样。 但实际上,在一个时间点上, 这个CPU只有一个线程在运行。 如果机器是双CPU,或者是双核,那么确实是多线程。 二、线程的启动和创建:                                 例子1:实现Runnable接口: package com.cy.thread; public class TestThread1 { public static void main(String[] args) { Runner1 r = new Runner1(); Thread t = new Thread(r); //启动一个线程

java并发神器 AQS(AbstractQueuedSynchronizer)

余生颓废 提交于 2020-03-21 22:27:01
3 月,跳不动了?>>> AbstractQueuedSynchronizer AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包 AQS的核心思想 是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。 CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列,虚拟的双向队列即不存在队列实例,仅存在节点之间的关联关系。 用大白话来说,AQS就是基于CLH队列,用volatile修饰共享变量state,线程通过CAS去改变状态符,成功则获取锁成功,失败则进入等待队列,等待被唤醒。 CAS(Compare and Swap) 科普 ​ 如字面意思,就是先比较再替换, ​ cas方法有三个重要参数 : 待比较的值、预期值、要修改的新值, 如果预期值是待比较的值一致,那么就把 要修改的值赋值给待比较的值 ​ 伪代码如下: Object old; // 待比较的值 Object new; // 预期值 Object update;// 要修改的新值 if(old == new)

Java 线程的基本使用

六眼飞鱼酱① 提交于 2020-03-21 20:36:11
线程的2种实现方式 1、继承Thread类,重写run()方法 public class Thread1 extends Thread{ @Override public void run() { //要执行的代码 while (true){ System.out.println("thread1 is running...."); } } } Thread1 thread1 = new Thread1(); thread1.start(); 2、实现Runnable接口 public class MyRunnable implements Runnable{ @Override public void run() { //要执行的代码 while (true) { System.out.println("thread2 is running...."); } } } MyRunnable myRunnable = new MyRunnable(); Thread thread2 = new Thread(myRunnable); thread2.start(); 相比而言,第一种要简单些。 我们测试下: public class Test { public static void main(String[] args) { Thread1 thread1 = new

python队列基本使用

半世苍凉 提交于 2020-03-21 19:59:28
Python queue队列 作用:    解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。    提高处理效率:FIFO = 现进先出,LIFO = 后入先出。 队列:   队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可。请求数据的线程只与这个队列容器存在关系,处理数据的线程down掉不会影响到请求数据的线程,队列会派给其他线程处理这分数据,它实现了解耦,提高效率。队列内会有一个有顺序的容器,列表与这个容器是有区别的,列表中数据虽然是排列的,但数据被取走后还会保留,而队列中这个容器的数据被取后将不会保留。当必须在多个线程之间安全地交换信息时,队列在线程编程中特别有用。 Python四种类型的队例: Queue:FIFO 即first in first out 先进先出 LifoQueue:LIFO 即last in first out 后进先出 PriorityQueue:优先队列,级别越低,越优先deque:双边队列 导入三种队列,包 from queue import Queue,LifoQueue,PriorityQueue Queue 先进先出队列: #基本FIFO队列 先进先出 FIFO即First in First Out,先进先出

python多线程

若如初见. 提交于 2020-03-21 18:43:47
一、threading   多任务可以由多进程完成,也可以由一个进程内的多线程完成。我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。   Python的标准库提供了两个模块: thread 和 threading , thread 是低级模块, threading 是高级模块,对 thread 进行了封装。绝大多数情况下,我们只需要使用 threading 这个高级模块。启动一个线程就是把一个函数传入并创建 Thread 实例,然后调用 start() 开始执行: import time, threading # 新线程执行的代码: def loop(): print 'thread %s is running...' % threading.current_thread().name n = 0 while n < 5: n = n + 1 print 'thread %s >>> %s' % (threading.current_thread().name, n) time.sleep(1) print 'thread %s ended.' % threading.current

python17 多线程学习

喜夏-厌秋 提交于 2020-03-21 18:43:14
多线程 多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外, 并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。 Python的标准库提供了两个模块: _thread 和 threading , _thread 是低级模块, threading 是高级模块,对 _thread 进行了封装 。绝大多数情况下,我们只需要使用 threading 这个高级模块。 启动一个线程就是把一个函数传入并创建 Thread 实例,然后调用 start() 开始执行: import time, threading # 新线程执行的代码: def loop(): print('thread %s is running...' % threading.current_thread().name) n = 0 while n < 5: n = n + 1 print('thread %s >>> %s' % (threading.current_thread().name, n)) time.sleep(1) print('thread %s ended.' % threading.current_thread

python学习笔记-41 多线程

泄露秘密 提交于 2020-03-21 18:42:52
多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。 Python的标准库提供了两个模块: _thread 和 threading , _thread 是低级模块, threading 是高级模块,对 _thread 进行了封装。绝大多数情况下,我们只需要使用 threading 这个高级模块。 启动一个线程就是把一个函数传入并创建 Thread 实例,然后调用 start() 开始执行: import time, threading # 新线程执行的代码: def loop(): print('thread %s is running...' % threading.current_thread().name) n = 0 while n < 5: n = n + 1 print('thread %s >>> %s' % (threading.current_thread().name, n)) time.sleep(1) print('thread %s ended.' % threading.current_thread()