1. 云栖社区>
  2. 全部标签>
  3. #线程#
线程

#线程#

已有3人关注此标签

内容分类:
博客 | 问答 | 视频 | 资料 |

真正并行计算的难度(附-真正AI的难度)

并行计算为何难以实现?因为我们的当代计算机始祖--冯诺依曼计算机就是个串行机,冯氏机器的理论基础是图灵机,图灵机本质上也是个串行机,按部就班的一 步一步做事,图灵机的脊髓在于计算的过程而不是计算的本身,这里的关键词“过程”本质上描述了图灵机更关注与过程,而过程就是按部就班的代名词。

线程 人工智能 并行计算

Posix标准中的timer和AIO

timer和aio这两个东西都用到了linux的信号机制,而且根据初始化时的参数,库或还提供了信号通知和回调函数通知两种机制,所谓信号通知就是在 timer到期或者aio完成的时候发送信号给调用进程,而回调函数通知就是在timer到期或者aio完成时直接调用用户注册的回调函数,个人认为回调 函数要好一些,因为不用通过内核发送信号,但是信号更加统一,是标准的做法。

linux 函数 线程 同步

可重入性和线程安全

可重入性就是线程安全吗?很多人包括我自己起初都不过分区分它们,实际上也没有过分它们的必要,程序员是干活的,就像民工只要浇铸混凝土就可以了,然而如果程序员对一些平常的操作知其所以然后,就可能成为策划者。

安全 程序员 函数 线程

基于inotify的文件监控方案

最近在做一个linux上的文件监控程序,2.6内核提供了inotify机制,这仅仅是个机制,任何策略都必须自己实现,这一点从inotify不提供递归接口就可以看出来,如果我实时监控到目录被创建,那么马上将这个新目录加入监控表,这个想法是最初的想法,也是最直接的想法,可是仔细推敲一下就会发现这个实现...

监控 线程 CPU inotify

OpenSSL多线程互斥的解决方案--一种新的锁

自己曾经将基于传统套接字的通信程序修改为了SSL的套接字程序,可是却在运行中出了问题,具体就是在SSL_write的地方遇到了NULL指针,不是SSL为NULL了,而是其中的一个字段为NULL但是在SSL_write中却用到了,因此就出错了,究其原因,罪魁祸首就是多线程,openssl的文档上也明文规定不能将一个SSL指针用于多个线程,可是我们程序的需求必须用于多个线程,在库的实现与我们的需求矛盾时,必然是修改我们的代码,这也正是体现了当机制和策略矛盾时,修改策略而不是机制。

函数 线程 SSL 解决方案 多线程 协议栈

openssl的互斥回调机制

很不幸,openssl的底层实现不是线程安全的,虽然我可以通过我自己实现的锁来安全的在不同的线程中使用同一个 ssl连接,也就是一个ssl指针可以在多个线程中共用,但是我们能看到的最底层也就是这个SSL类型的指针了,这也是我们可以保护的最底层了,再往下的 层次中该如何实现线程互斥呢?大致看了一下o...

安全 函数 加密 线程 void file 数据结构

linux是一个工程而不是理论

今天无聊的时候看了一会linux的FAQ,里面着重提出,linux不是一个很好的计算机科学理论而是一个很好的工程,很多人在邮件列表中提出一个新的想法,真的是很有创意的想法,但是很无情的被那些大牛们给咔嚓了,然后Linus或者Alan Cox等人就会给人一种很不随和的形象,其实他们都很忙,都有自己的...

linux 线程 测试 多线程 CPU

速写几点linux方面的感悟

晚饭后看了remap_file_pages,这个函数主要就是将一个文件的任何位置映射进任何一个vma(稍微有点限制)的任何地方,man手册上说的很清楚: The remap_file_pages() system call is used to create a non-linear mappin...

linux 函数 性能 线程 CPU Create file mapping

linux内核启动的优化

linux内核启动需要时间,并且需要很多的时间,这是逃避不了的,了解linuxbios的朋友可能知道,linuxbios作为bios和别的bios相比启动的特别快,因为它把硬件检测的任务交给了linux内核而不是bios,毕竟bios检测完了内核再检测是一种浪费,为了bios的性能,把工作推给内核是不负责任的行为吗?其实不是,实际上启动时最耗时的操作就是硬件检测和初始化,正是因为如此,linuxbios才把如此艰巨的任务避开,一并给了操作系统内核。

linux 函数 线程

linux的swapper_pg_dir的初始化

linux的启动涉及到一个解压与定位的过程,对于x86体系结构而言,系统被加载到0x100000的地方,那么swapper_pg_dir的值是什么呢?我们知道swapper_pg_dir是一个很重要的东西,它是所有进程内核空间的页表的模板,而且在涉及到896M以上的内存分配时,swapper_pg_dir也是一个同步的根,这些内存分配包括vmalloc区,高端永久区,高端临时区等。

linux 线程 操作系统 内存映射

一个心跳保活类的设计

心跳在很多的服务器程序中应用很多,作为一种轮询的方案,效率可能没有基于中断的高,但是这种方案非常稳定,因此也被大量采用,心跳说白了就是不断向对方发送数据包,如果对方在确定时间回复就说明对方存活,反之对方已死,在稳定的同时也会造成很多误判,因为如果一旦对方由于一些别的工作耽误了回复心跳,那么这端就会...

服务器 线程 镜像 容器 void

关于邮件列表一个问题的解释

问题:在 exit_mm() 中为什么要 atomic_inc(&mm->mm_count) 呢? 并没有对应的dec。 解答: 首先要明白,对于一个可以被释放内存的进程也就是说一个拥有mm_struct的进程来说,它的task_struct中的mm字段和active_mm字段是一样的,这个在fo...

linux 线程

Linux进程切换以及内核线程的返回值

linux中的进程是个最基本的概念,进程从运行队列到开始运行有两个开始的地方,一个就是switch_to宏中的标号1:"1:/t",另 一个就是ret_form_fork,只要不是新创建的进程,几乎都是从上面的那个标号1开始的,而switch_to宏则是除了内核本身,所有的进程要 想运行都要经过的...

linux 线程

TLB刷新的深入理解

为何linux内核的leave_mm中最后有一个load_cr3,这样的话岂不是又加载了cr3,这样岂不是违背了懒惰模式懒惰刷新tlb的初衷吗?这是邮件列表中很多人问的一个问题,要回答这一个问题,还要从2.6.18内核谈起。

函数 线程 CPU

poll/epoll/keyed-poll/keyed-epoll的唤醒--分层次的解决方案

linux中poll系统调用实现了对文件描述符的轮询,由于poll的实现问题,每当一个或者多个文件描述符上有事件发生的时候,poll的核心并没有什么好的办法可以知道到底是哪些文件描述符上发生了事件,于是不得不采用遍历所有的fd_set中的文件描述符的办法,但是这种方式很低效,如果有很多的描述符但是只有最后一个上发生了事件,那么将会消耗很多的时间,于是出现了epoll,epoll本质就是应用唤醒回调函数,只将被唤醒的wait队列元素加入到一个表中,然后只需要遍历该表的元素就可以了,如果还是上面的情况,那么只有一个wait元素被加入到表中,只要在这个表中的元素上poll一下就完成了。

linux 监控 函数 线程 解决方案 static void file

Windows与Linux的异步IO在设计上的差异

在windows操作系统内核中,首先要明白四个概念,apc(异步过程调用),dpc(延迟过程调用),irp(io请求包)以及基于优先级的抢占式调度,下面分别解释: 1.apc。 异步过程调用类似于linux下的信号,只不过信号处理函数的执行需要两步:设置和触发,而apc则只有一步,只需要将apc回调函数排入线程的apc对 列,它就总会被执行的。

linux apc 函数 线程 windows 同步 Unix

windows中断请求级(IRQL)

windows是完全按照模块化设计的,那么它很重要的一个概念就是“交互”。在linux中,没有所谓的“交互”,如果非要对应一个,那么交互就是函数 调用,而windows的内核却不是这样简单。这也许就是宏内核和微内核的区别吧?windows是一个基本的c/s模式的系统,内核里面也不乏这样的例 子,到处都是c/s的影子,不信你看,到处都是xx管理器。

linux 函数 线程 windows 模块

NT内核代码分析

某种意义上nt内核用irql解决了一切,这正是由于它有一个基本的,核心的支撑。这就是它的抽象中断框架---IRQL。在linux中,我们知道,如 果我要知道能否调用schedule进行调度,那么我必须知道还有什么数据结构处在临界区,这个时候是否适合抢占,等等,当然内核的数据结构已经做得很好,我们做...

linux 线程 CPU 数据结构

windows驱动里面的问题

先转一段,具体出处忘了: 驱动程序和应用程序的另外一个不同是运行驱动程序时系统并不创建专门的线程。取而代之的则是当某一个线程被激活的时候由系统来决定是否执行驱动程序里的子程序 当一个硬件中断发生的时候我们不可能预测到此时正是哪个线程。

linux 木马 函数 线程 windows 同步 开发框架

通过IRQL看NT内核

linux强调的是进程自主性,windows则是对象自主性,其中线程本身也是一个对象,进程也是,所以一个进程可以操作另外一个进程的地址空间也就不足为奇了,windows的通信实际上是对象间通信,而linux因为一切围着进程转,最新的内核中断也被线程化了,因此通信就是进程间通信,linux 中进程作为超级容器的意义要比windows的更大些,windows中进程是一个容器,也是一个对象,某种意义上它作为容器的意义是容纳别的对象。

linux apc 线程 windows 容器 磁盘 数据结构

579
GO