标签: python-stackless

Mono Tasklet/Co-Routines的开销

新的Mono Continuations/Tasklet框架的主要性能开销(gc/stack复制......)是什么?

这个开销(协程性能/原始性能)与其他框架(如Lua Coroutine和无堆栈python)相比如何?

在Mono 2.6中将添加延续/协程支持.我构建了一个svn版本并使用以下代码来估计其开销

static void Main()
{
    Console.WriteLine("starting.,..");
    for(int i = 0; i < 10000; i++)
    {
        MicroThread t1 = new MicroThread(Run1);
        t1.Start();
    }
    Scheduler.Run();
    Console.WriteLine("starting raw loop.,..");
    int x = 2;
    for (int i = 0; i < 10000 * 400; i++ )
    {
        x++;
    }
    Console.WriteLine("1finished.,.. " + x.ToString());
    Console.ReadLine();
}

static void Run1()
{
    for (int y = 0; y < 400; y++)
    {
        MicroThread.CurrentThread.Yield();
    }
}
Run Code Online (Sandbox Code Playgroud)

微线程/调度程序运行大约需要1.5-2秒,而原始循环几乎是不稳定的.虽然预计会有开销,但这似乎有点多.

新的Mono Continuations/Tasklet框架的主要性能开销是什么?这个开销(协程性能/原始性能)与其他框架(如Lua Coroutine和无堆栈python)相比如何?

谢谢

c# mono lua coroutine python-stackless

4
推荐指数
1
解决办法
1160
查看次数

在python中是否存在工作线程这样的事情?

我编写了一个漂亮的多线程脚本,当我运行它时,它使用25个线程比直接调用线程处理程序更糟糕.

然后我发现了全局解释器锁.我想问一下,在我丢弃这个脚本的python并重写其他东西之前,有没有办法在python中进行实际的多线程处理?

python multithreading python-stackless

3
推荐指数
1
解决办法
186
查看次数

Python的tasklet是不是违反了没有"GOTO"的规则?

我已经对Stackless Python的tasklets进行了大量的谷歌研究.每个来源都提到它作为一个主题

stackless.com:Microthreads:tasklets包装函数允许它们作为微线程启动.

disinterest.orgv:Tasklets - 轻量级线程

但是,tasklet并不简洁.它们执行部分代码.

像这样的代码:

def function(n):
   print n
   print n
   stackless.schedule()

stackless.tasklet(function)(3)
stackless.tasklet(function)(10)
stackless.run()
Run Code Online (Sandbox Code Playgroud)

会打印

3
3
10
10
Run Code Online (Sandbox Code Playgroud)

tasklet执行代码直到遇到stackless.schedule()然后它从开始或从最后一次暂停的位置开始执行下一个tasklet.

每个程序员都知道"没有GOTO"的黄金法则.我的问题是:

这和GOTO有什么不同?
如果没有并行执行tasklet,有什么好处?
为什么每个消息来源都提到它们作为线程替代品,如果它们不是真正的线程?

python concurrency green-threads python-stackless

3
推荐指数
1
解决办法
188
查看次数

使用名为guppy(heapy)的Python工具时C代码中的Segfault

所以我在两台不同的机器上使用Python Stackless with heapy,它们具有相同的架构,但C编译器略有不同.Heapy在第一个上运行得非常好,但是我在第二个上获得了核心转储.

Python 2.7.1 Stackless 3.1b3 060516 (release27-maint, Jul 20 2011, 13:26:38)
[GCC 3.4.3 (MontaVista 3.4.3-25.0.116.0601565 2006-09-20)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from guppy import hpy;
>>> h=hpy()
>>> h.heap()
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决这个问题.任何建议赞赏.

如果你想知道,这是它在另一个有效的外观:

Python 2.7.1 Stackless 3.1b3 060516 (python-2.71:88862M, Jul 21 2011, 16:57:52)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from guppy import hpy;
>>> h=hpy()
>>> …
Run Code Online (Sandbox Code Playgroud)

c python memory-management cython python-stackless

2
推荐指数
1
解决办法
732
查看次数

请解释套接字缓冲区

我试图找到关于套接字编程的例子并且发现了这个脚本:http: //stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py

通过这个脚本阅读我发现这一行:listenSocket.listen(5)

据我所知 - 它从缓冲区读取5个字节,然后用它做东西......

但如果另一端发送超过5个字节会发生什么?

在该脚本的另一个位置,它根据4个命令检查输入,并查看字符串中是否有\ r \n.不要像"look"加上\ r \n这样的命令弥补超过5个字节?

艾伦

python sockets stackless python-stackless

1
推荐指数
1
解决办法
973
查看次数