单线程

单线程与多线程的区别,线程安全与线程不安全的区别

懵懂的女人 提交于 2020-01-28 12:00:47
线程安全与不安全的文章:https://blog.csdn.net/csdnnews/article/details/82321777 线程安全不等同于单线程,一般多个线程对同意方法或者语句进行写的时候要考虑线程安全问题,对结果没有影响的时候不用考虑 来源: CSDN 作者: weixin_38727482 链接: https://blog.csdn.net/weixin_38727482/article/details/103943307

运行时和运行时库 (摘录)

落花浮王杯 提交于 2020-01-23 02:32:10
Runtime : When a program is running, or executing, it is said to be in runtime. The term is mostly used by software developers to specify when errors in a program occur. A "runtime error" is an error that happens while the program is executing. For example if a program told you that 2 + 2 was 5000 that would be a runtime error. A memory leak where the program sucks up excessive amounts of system memory is also a runtime error. The other major type of program error is a compile-time error where the application will not even compile into an executable program. Examples of compile-time errors are

day35 python socket 单线程的并发 io多路复用 协程 greenlet模块 gevent模块

不想你离开。 提交于 2020-01-22 18:25:02
day35 python socket 单线程的并发 io多路复用 协程 greenlet模块 gevent模块 一.socket相关 1.socket: 所有的网络请求都是基于socket实现的,默认是阻塞的 2.requests是用的socket的客户端 3.socket到底哪端(谁)发生了变化 如果客户端向服务端发起连接时, 则服务端发生了变化 如果服务端向客户端发送数据时, 则客户端发生了变化 conn,addr = server.accept() conn.recv() 4.如果想要提高并发(目前有以下两种) 多进程: 计算密集型 多线程: io密集型,如socket请求 二.单线程的并发 需求: 模拟浏览器发送请求: 向百度发送请求搜索三个关键词 1.单线程(串行): 使用requests模块 import requests key_list = ['bajie','wukong','datang'] for item in key_list: ret = requests.get( url="https://www.baidu.com/s?wd=%s" % (item,), headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox

06------线程机制与事件机制

余生长醉 提交于 2020-01-21 16:38:11
进程与线程 1.进程 程序的一次执行,它占有一片独有的内存空间 可以通过windows任务管理器查看进程 2.线程 是进程内的一个独立执行单元 是程序运行的一个完整流程 是CPU的最小调度单元 如下图: 3.相关 应用程序必须运行在某个进程的某个线程中 一个进程中至少有一个运行的线程:主线程,进程启动后自动创建 一个进程中可以同时运行多个线程,程序是多线程运行的 一个进程内的数据可以供其中的多个线程直接共享 多个进程之间的数据是不能直接共享的 线程池(thread pool):保存多个线程对象的容器,实现线程对象的反复利用 4.相关问题 1).何为多进程与多线程? 多进程:一应用程序可以同时启动多个实例运行 多线程:在一个进程内,同时有多个线程运行 2).比较单线程与多线程? 多线程 优点: 能有效提升CPU的利用率 缺点: 创建多线程开销 线程间切换开销 死锁与状态同步问题 单线程 优点: 顺序编程简单易懂 缺点: 效率低 3).JS是单线程还是多线程? JS是单线程运行的 但使用H5中的Web Workers可以多线程运行 4).浏览器运行是单线程还是多线程? 都是多线程运行的 5).浏览器运行是单进程还是多进程? 有的是单进程:firefox、老版IE 有的是多进程:chrome、新版IE 浏览器内核 支撑浏览器运行的最核心的程序 1.不同浏览器的内核可能不同 Chrome

运行时和运行时库 (摘录)

半腔热情 提交于 2020-01-21 09:17:51
Runtime : When a program is running, or executing, it is said to be in runtime. The term is mostly used by software developers to specify when errors in a program occur. A "runtime error" is an error that happens while the program is executing. For example if a program told you that 2 + 2 was 5000 that would be a runtime error. A memory leak where the program sucks up excessive amounts of system memory is also a runtime error. The other major type of program error is a compile-time error where the application will not even compile into an executable program. Examples of compile-time errors are

Memcached、Redis OR Tair

痞子三分冷 提交于 2020-01-21 03:43:38
一、前言   非关系型数据库(NoSQL = Not Only SQL)的产品非常多,常见的有Memcached、Redis、MongoDB等优秀开源项目,相关概念和资料网上也非常丰富,不再重复描述,本文主要引入Memcached和Redis与淘宝开源Tair分布式存储进行对比测试,由于各自适用场景不同,且每个产品的可配置参数繁多, 涉及缓存策略、分布算法、序列化方式、数据压缩技术、通信方式、并发、超时等诸多方面因素,都会对测试结果产生影响 ,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何评估依据,仅供参考,加深对各自产品的理解。以下是一些基本认识:   1、尽管 Memcached 和 Redis 都标识为Distribute,但从Server端本身而言它们并不提供分布式的解决方案,需要Client端实现一定的分布算法将数据存储到各个节点,从而实现分布式存储,两者都提供了Replication功能(Master-Slave)保障可靠性。   2、Tair 则本身包含 Config Server 和 Data Server 采用一致性哈希算法分布数据存储,由ConfigSever来管理所有数据节点,理论上服务器端节点的维护对前端应用不会产生任何影响,同时数据能按指定复制到不同的DataServer保障可靠性,从Cluster角度来看属于一个整体Solution

Python-协程

风格不统一 提交于 2020-01-20 04:14:24
一、引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质: 切换+保存状态 。 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制): 一种情况是该任务发生了阻塞; 另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它。 协程本质上就是一个线程,以前线程任务的切换是由操作系统控制的,遇到I/O自动切换,现在我们用协程的目的就是较少操作系统切换的开销(开关线程,创建寄存器、堆栈等,在他们之间进行切换等),在我们自己的程序里面来控制任务的切换。 ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 需要 注意 的是: 一:其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果多个任务都是纯计算的,这种切换反而会降低效率。为此我们可以基于yield来验证。yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下: #1 yiled 可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级 #2 send 可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换 通过yield实现

tomcat线程池

依然范特西╮ 提交于 2020-01-20 01:52:21
java一个http请求就是一个线程,java的服务是每收到一个请求tomcat就会从线程池中取出一个空闲线程来处理 https://blog.csdn.net/elvis_lfc/article/details/53466877 https://blog.csdn.net/h12kjgj/article/details/55063956 ===总结 1http请求,就是来银行办理业务的用户。 1 2tomcat,就是银行 3一个线程,就是开辟一个窗口 5线程是共享cpu的,那么多线程比单线程,能提升处理速度? 好比,一个窗口(一个cpu),三个人来办理业务。 单线程:一个办完一个办。 多线程:大家轮着办,我一会给你办,你会儿给他办。 但是单线程,多线程,耗时是一样的。并没有提升效率,那么为什么还说多线程比单线程效率高呢? 原文:https://blog.csdn.net/weixin_39833509/article/details/88603957 版权声明:本文为博主粘贴文章 来源: CSDN 作者: qq_39497281 链接: https://blog.csdn.net/qq_39497281/article/details/104043121

运行时和运行时库 (摘录)

倾然丶 夕夏残阳落幕 提交于 2020-01-18 12:08:11
Runtime : When a program is running, or executing, it is said to be in runtime. The term is mostly used by software developers to specify when errors in a program occur. A "runtime error" is an error that happens while the program is executing. For example if a program told you that 2 + 2 was 5000 that would be a runtime error. A memory leak where the program sucks up excessive amounts of system memory is also a runtime error. The other major type of program error is a compile-time error where the application will not even compile into an executable program. Examples of compile-time errors are

《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高?

老子叫甜甜 提交于 2020-01-17 02:23:15
1、面试题 Redis和Memcached有什么区别? Redis的线程模型是什么? 为什么Redis是单线程的但是还可以支撑高并发? 2、面试官心理分析 问这个的时候就是问你Redis的原理了,看你是不是思考过,研究过。Redis最基本的一个内部原理和特点,就是Redis实际上是个单线程工作模型。你要是连这个都不知道,那后面在使用Redis的时候,如果出了问题岂不是什么都不知道,无从下手? 还有可能面试官会问问你Redis和Memcached的区别。不过说实话,近几年,面试官都不太喜欢这么问了。因为memcached是早些年各大互联网公司常用的缓存方案,但是现在近几年基本都是Redis,没什么公司用memcached了。 3、温馨提醒 如果你要是现在还不知道redis和memcached是啥,那你赶紧百度一下redis入门和memcahced入门,找两篇博客教程什么的简单启动一下,然后试一下几个简单操作,先感受一下,跟这个博客跟着教程做个demo程序,1小时以内就搞定了,就能初步了解和入门了。然后接着回来继续看。 另外一个友情提示,要弄明白redis的线程模型的话,前提是你需要了解socket网络相关的基本知识。如果你socket都不了解的话那我觉得你java没学好吧。初学者都该学习java的socket网络通信相关知识的。 4、面试题剖析 (1