abc612008 最近的时间轴更新
abc612008

abc612008

V2EX 第 241732 号会员,加入于 2017-07-20 08:42:47 +08:00
abc612008 最近回复了
1 天前
回复了 pureGirl 创建的主题 程序员 Python 中线程和协程的区别是什么
多线程:
1. 同一时间可以有两个指令在被 CPU 执行。
2. 线程是系统/硬件级的概念。
3. 例子:咖啡店有两个(机器人)店员在同时做咖啡。(你也没法写软件多出一个店员)

协程
1. 同一时间只有一个指令在被执行,但是可以是完全不同地方的指令。
2. 协程是应用级的概念。
3. 一个店员在做两杯咖啡,在等加热的时候去“同时”做另一杯。(因此协程通常只有在 IO bound 的时候才比较有作用)

当然也可以既有多线程也有协程。

我觉得你的问题是,既然 GIL 导致没有办法同时真的执行两个 python 语句,那多线程不就和协程一样了。我的理解是 python 的多线程仍然是多个系统线程,而 GIL 只在 python 代码里会被 lock ,如果是在做 IO bound/syscalls 或者甚至 numpy,pandas 在做计算的时候都会 release GIL 。
> 严禁使用任何代码生成工具或者外部辅助手段解题,包括但不限于将题目描述、测试用例或解题代码输入到外部辅助工具中的行为

lc 竞赛用 LLM 生成代码是禁止的。
12 天前
回复了 aqtata 创建的主题 C++ 这种情况如何消除几百个 if/else
@ysc3839 #62 已经有点复杂到一般人看不懂了... 其实取决于场景,甚至可以直接丢 dll/so 里然后运行时加载库直接找对应的符号(
13 天前
回复了 aqtata 创建的主题 C++ 这种情况如何消除几百个 if/else
@bluearc #57 都用上 map 了那不如这样:

```
#include <iostream>
#include <functional>

constexpr int maxN = 100;

class Foo {
public:
static void invoke(int i) {
_mapping[i](i);
}

private:
static std::function<void(int)> _mapping[maxN];

template <int N>
struct FooHelper {
FooHelper() {
_mapping[N] = [](int n) {
std::cout << "Foo<" << N << "> (" << n << ")" << std::endl;
};
}
};
template <int N>
struct Initer : Initer<N-1> {
FooHelper<N> _foo;
};
static Initer<maxN> _initer;
};
template<>
struct Foo::Initer<0> {};
std::function<void(int)> Foo::_mapping[maxN];
Foo::Initer<maxN> Foo::_initer;

int main(){
int n;
std::cin>>n;
Foo::invoke(n);
}
```

虽然感觉也挺丑的
13 天前
回复了 aqtata 创建的主题 C++ 这种情况如何消除几百个 if/else
@ysc3839 #56 你这个调用一次 func 的时间是 O(n)的吗..难道要从 0 开始试
```
❯ ./a.out 7
n = 7
test<2>(7)
test<3>(7)
test<5>(7)
test<7>(7)
func<7>()
```
14 天前
回复了 aqtata 创建的主题 C++ 这种情况如何消除几百个 if/else
@bluearc 这是 gpt 写的吗?模板参数丢个运行时变量进去怎么可能编译的过。
Backblaze $6/tb/mo 大概每 gb 每月 4 分钱?
pixel 哪来的双卡
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   659 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.