V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
crella
V2EX  ›  奇思妙想

脚本解释器启动时有多少线程?

  •  
  •   crella · 2020-06-10 22:20:47 +08:00 · 1937 次点击
    这是一个创建于 1426 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在写 ruby 写多线程脚本的时候,突发奇想:就算是只在主线程里执行某个用时很长的函数,当按下 Ctrl+C 的时候会显示 Interrupt,那这个 Interrupt 是如何捕捉的呢?所以有了以下测试。

    用例:Python(win64 、mingw64)、Ruby(win64 、mingw64)、Perl(mingw64),系统是普通 Win7 64 位。用资源管理器(resmon)来查看程序用到的线程数

    Python win64: 2 线程 python-loop-win.jpg

    python-win.jpg

    Python 的示例代码里一种用了 sleep,一种用了需时较长的函数(要有足够的时间,资源管理器上才会显示进程的信息),结果程序的线程数是一样的,说明 sleep 应该也是单线程函数。

    Python mingw64: 1 线程

    python-loop-msys.jpg

    python3-msys2.jpg

    Ruby win64: 2 线程

    ruby-win.jpg

    Ruby mingw64: 3 线程???

    ruby-msys.jpg

    Perl mingw64: 2 线程

    perl-msys.jpg

    (Strawberry perl 下载慢,ActiveState perl 安装又慢,感觉不测试也没事)

    不知道 lua 简单的 sleep 语句怎么写,放弃。

    结果还是有点出乎意料的。我猜测 win 原生的解释器应该是加了 posix 的某些东西,所以多了一个线程吧。一时兴起,也不知道怎么搜索关键词,也不想深究了。

    3 条回复    2020-06-15 17:01:09 +08:00
    billlee
        1
    billlee  
       2020-06-10 22:50:38 +08:00
    试了一下,mingw64 的 bash 线程数是 8, linux 的 bash 是 1 线程

    另外,POSIX 下处理信号并不需要线程
    msg7086
        2
    msg7086  
       2020-06-11 10:19:56 +08:00
    信号类似中断,由操作系统直接改变你代码的运行流程。
    比如你的程序在执行 calc()运算,然后又有一个信号处理程序 signal_handler()。
    你程序运行的时候,执行位置当然在 calc()里,但是如果这时候你按下 Ctrl-C,就会触发一个 SIGINT 信号给进程,操作系统会直接停下这个线程,保存上下文环境,然后让当前程序从 signal_handler()开始执行,执行完退出函数后,再回到 calc()里停下的地方继续执行。
    如果没有信号处理函数,就执行默认的处理函数,Ctrl-C 对应的默认处理函数当然就是退出程序了。

    所以中断不需要多线程。

    Windows 下不太一样,但是原理是类似的。
    smallpython
        3
    smallpython  
       2020-06-15 17:01:09 +08:00
    while True:
    try:
    test()
    time.sleep(60)
    except:
    pass

    这样写的话 ctrl+c 停不下来, 只有 kill -9
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1864 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.