并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。大致上有这么两种多任务技术,一种是抢占式多任务 (preemptive multitasking),它让操作系统来决定何时执行哪个任务。另外一种就是协作式多任务(cooperative multitasking),它把决定权交给任务,让它们在自己认为合适的时候自愿放弃执行。这两种多任务方式
转载 2024-05-22 10:25:53
41阅读
结论首先我们先给出结论:Redis确实是单线程的,但是严格的说Redis并不是全面单线程的!!!简单分析Redis对外提供键值存储服务的主要流程是单线程,也就是网络IO与数据读写是由单个线程来完成的。持久化、异步删除、集群数据同步等是由额外线程来执行的。好处:防止同步代码占用主线程,导致阻塞官方解释由于Redis是基于内存的操作,查找和操作的时间复杂度都是O(1),因此CPU并不是Redis的瓶颈
转载 2023-05-25 15:19:24
104阅读
一、LuaRedis这篇其实和Redis本身的源码关系不是太大了,主要是看一下对REDIS的支持。Lua可能好多人都没有听说过,但是如果搞过网游的人,估计都用过,做为一种胶水语言,Lua对C/C++的支持非常友好,这是一般的脚本语言都没有做到的。它很小很轻量,所以非常容易与其它程序集成。在魔兽和仙剑等游戏中都广泛使用。 Lua的缺点也很明显,对开发支持的力度不大,功能也少,功能少,就意味着如果搞
转载 2023-09-02 21:19:50
154阅读
1、coroutine运行一系列的协作多线程。每个coroutine相当于一个thread。通过yield-resume实现在不同thread之间切换控制权。但是,跟常规的多线程不同,coroutine是非抢占式的。一个coroutine在运行的时候,不可能被其他的coroutine从外部将其挂起,只有由其本身显式地调用yield才会挂起,并交出控制权。对
转载 2024-03-17 12:14:04
99阅读
1.目前最新的lua版本是lua5.2.32.官网下载地址:http://www.lua.org/ftp/3.lua的初衷就是一个用于c/c++的小巧的脚本语言,本身是什么功能都没有的,需要手动用C++扩展它。4.我们在实际的应用开发(基本上是游戏开发),通常是用C/C++实现功能,而用lua来实现逻辑。5.lua是一个动态的脚本语言,动态是指程序在运行时可以改变其结构。6.解压下载后的lua包发
多线程的概念不太明确,所以这一章,还是没有和线程技术对比来理解。这一章对协同程序的应用和前面提到的过滤器和迭代器不同。 无论是在过滤器和迭代器中,即使有多个协同程序,协同程序之间两两之间都有关系。 比方说,在过滤器中,生成者如果通过函数coroutine.yield(x)将程序挂起,就会把x传递给函数coroutine.resume()作为这个函数的返回值,过滤器拿到这个返回值作为下一个协同函
转载 2024-04-23 14:48:59
46阅读
Lua的coroutine 跟thread 的概念比较相似,但是也不完全相同。一个multi-thread的程序,可以同时有多个thread 在运行,但是一个multi-coroutines的程序,同一时间只能有一个coroutine 在运行,而且当前正在运行的coroutine 只有在被显式地要求挂起时,才会挂起。Lua的coroutine 是一个强大的概念,尽管它的几个主要应用都比较复杂。1.
转载 2024-04-07 14:07:13
208阅读
协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程。 协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。 多线程程序同时运行多个线程;而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起。这
转载 2024-05-10 21:32:05
69阅读
Lua所支持的协程全称被称作协同式多线程(collaborative multithreading)。Lua为每个coroutine提供一个独立的运行线路。然而和多线程不同的地方就是,coroutine只有在显式调用yield函数后才被挂起,同一时间内只有一个协程正在运行。Lua将它的协程函数都放进了coroutine这个表里,其中主要的函数如下摘取一段云风的代码来详尽解释协程的工作机制,在这段代
转载 2024-05-11 08:18:25
159阅读
lua本身是不支持真正的多线程的,但是lua提供了相应的机制来实现多线程lua执行在一个lua环境中内部叫lua_State。如果我们创建多个lua_State,并且创建一一对应的线程来启动它就基本实现了一个封闭的多线程环境。但是这种环境下lua代码之间没有任何联系,不能共享数据,不能进行同步。因此我们需要建立一套共享数据与同步的机制来。thread.new("test_thread") --
转载 2024-07-03 23:05:01
69阅读
## 保证线程安全的redis lua脚本 Redis是一个开源的内存数据库,其支持使用Lua脚本来执行一系列操作,这使得Redis在处理复杂逻辑时更加灵活和高效。然而,在多线程环境下,为了保证数据的一致性和线程安全,我们需要特别注意如何编写Lua脚本。本文将介绍如何使用Redis Lua脚本来保证线程安全,并通过示例代码演示。 ### Lua脚本保证线程安全的方法 在Redis中,Lua
原创 2024-05-15 06:46:44
140阅读
一、螺纹的种类和应用1:按螺纹牙型分类 2:按螺旋线的方向分类 3:按螺旋线的线数分类 4:按螺旋线形成的表面分类 二、普通螺纹的主要参数 三、螺纹的代号标注一、普通螺纹的代号标注1.细牙螺纹的每一个公称直径对应着数个螺距,因此必须标出螺距值,而粗牙普通螺纹不标螺距值。2.右旋螺纹不标注旋向代号,左旋螺纹则用LH表示。3.旋合长
转载 2024-07-19 16:34:22
72阅读
最近写paintsnow::start时出现了一个非常麻烦的BUG,程序的Release版本大约每运行十几次就会有一次启动时崩溃(Debug版本还没崩溃过),崩溃点也不固定。经过简单分析之后,确定是线程同步的问题。于是便修改了线程通信的代码,并使用pthread_mutex_lock/unlock来防止冲突。重新编译后,崩溃频率有所减少。但是每运行约四十次,还是免不了崩溃一次,而且冷启动时崩溃概率
转载 9月前
34阅读
本节大概地讲一下关于协同程序的知识点。在前面我们讲了lua的数据类型种类的时候,我们讲过thread这种类型,本节就讲这种类型是如何创建的,以及如何使用它。协同程序(coroutine)跟多线程有相似之处,拥有自己的局部变量,栈空间,变量指针等,也拥有共享的全局变量。但二者还是有一定的区别:多线程可以同时运行多个线程,而协同程序一个时候只能运行一个,并且只有在显式调用挂起之后,才会使协同程序暂停下
转载 2024-05-13 19:30:11
79阅读
本人表达能力有限,所以文字描述不太清晰,我更习惯自己默默地造轮子,所以我只能尽力保证我给轮子可以被直接使用。虽然不太会说,但有一些前提还是必要讲一下的:直观的讲:lua并不支持多线程,任何尝试用lua做并发方案的人,都有病,没错,我自己也是。lua有并发需求本身就是一件很鬼扯的事,本身会有这种需求,就说明可能在项目架构的大方向上,存在了问题。我认为对于C/C++程序员来说,我们看中lua的地方是,
转载 2024-03-01 12:43:14
211阅读
Lua多线程用法 for Win32Exts            目前 Lua 中并没有 真正的抢占式 thread 的概念,只有一个类似的协程:coroutine 对象,同一时间只能运行一个 coroutine ,并且需要显式的进行切换才能执行。与实际应用需求相差甚远。(coroutine 用法参见:
转载 2024-03-06 15:14:31
100阅读
在JAVA中,用Thread类代表线程,所有线程对象,都必须是Thread类或者Thread类子类的实例。每个线程的任务就是执行一段顺序执行的代码,JAVA使用线程执行体来容纳这段代码。所以,我们创建线程时,主要是根据实际需求,编写放入线程执行体的代码。一、继承Thread类创建线程1、定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,
转载 2024-07-13 09:25:34
78阅读
一 ThreadLocal定义ThreadLocal是线程局部变量,是一种保存线程私有信息的机制。通过 ThreadLocal 可以为每个线程提供线程独有的变量拷贝,用来保证每个线程间访问的变量互不影响,这种变量只在线程的生命周期中起作用,在本线程内随地可取可用,以减少同一个线程内多函数间变量传递的复杂度。ThreadLocal是用来解决java多线程程序中并发问题的一种方式,除ThreadLoc
前面写了个lru缓存,适用于单线程的场景。多线程实现缓存的思路有很多种,有基于ttl淘汰策略的,有基于lru淘汰实现的,而在淘汰的方式也有很多选择,如果选用Concurrenthashmap,可以很好的基于ttl淘汰策略,具体实现是另开一个守护线程,定时淘汰ConcurrenthashMap中的过期键,而在使用lru淘汰策略时则需要额外借助辅助结构双向链表,需要额外的同步操作,由于在本文之前实现了
转载 2024-04-29 11:59:37
34阅读
Lua 学习目标是 能写一些 Lua脚本Redis 使用Lua 5.1 版本。 Lua是动态类型语言。
  • 1
  • 2
  • 3
  • 4
  • 5