« [ニッキ] 無礼者 | トップページ | [自作] L2 キャッシュ 512MB ? »

2007/09/23

[ python ] Threading で作成されるスレッドはネイティブスレッド

とある人から「Python では Thread / threading モジュールをを使ったとしても、ネイティブマルチスレッドアプリは作れない」と聞いていたのですが、少なくとも、Win32 環境においてはネイティブスレッドになるようです。

havana の発言:
  あれ
havana の発言:
  Pythonはネイティブスレッド使ってるって
havana の発言:
  書いてあるけど。
havana の発言:
  おお?
fomalhaut の発言:
  いや
fomalhaut の発言:
  そんなことないはずだけど・・・
fomalhaut の発言:
  threading つかってみ?
havana の発言:
  http://0xcc.net/blog/archives/000099.html
havana の発言:
  なまずのひととか
havana の発言:
  んー。
havana の発言:
  どうなんでしょう
havana の発言:
  ソース読めば解るな
havana の発言:
  ごそごそ
fomalhaut の発言:
  (´・ω・`)
havana の発言:
  Pythonの実装見てきたー
havana の発言:
  やっぱりthreadingのなかでthreadってモジュールを使ってて
havana の発言:
  threadの実装がプラットホーム毎に
fomalhaut の発言:
  うん
havana の発言:
  ネイティブスレッドでスレッドを実現する仕組み。
fomalhaut の発言:
  thread が低レイヤーのスレッド実装
fomalhaut の発言:
  
fomalhaut の発言:
  
fomalhaut の発言:
  thread 使っても
fomalhaut の発言:
  ネイティブスレッドにはならんらしいぞ
havana の発言:

PyThread_start_new_thread(void (*func)(void *), void *arg)
{
	Py_uintptr_t rv;
	callobj obj;

	dprintf(("%ld: PyThread_start_new_thread called\n",
		 PyThread_get_thread_ident()));
	if (!initialized)
		PyThread_init_thread();

	obj.id = -1;	/* guilty until proved innocent */
	obj.func = func;
	obj.arg = arg;
	obj.done = CreateSemaphore(NULL, 0, 1, NULL);
	if (obj.done == NULL)
		return -1;


havana の発言:

	rv = _beginthread(bootstrap, _pythread_stacksize, &obj);

havana の発言:
  ってなってるけど。
havana の発言:
  pthread実装とかもあるし。
havana の発言:
  んー
havana の発言:
  _beginthreadはWin32のスレッド開始めいれいだぬ
havana の発言:
  http://msdn2.microsoft.com/ja-jp/library/kdzttdcb(VS.80).aspx
havana の発言:
  はて。
fomalhaut の発言:
  (´・ω・`)
havana の発言:
  あとはネイティブスレッドでない場合
havana の発言:
  インタプリタ側でスケジューリングしないと成らないけど
havana の発言:
  それぽいところがみあたらん。
fomalhaut の発言:
  なるほど
havana の発言:
  うむ
havana の発言:
  ためしにPythonでタイマ100個つくってみたが
havana の発言:
  ネイティブスレッドが101個できたよ
havana の発言:
  1個インタプリタのスレッドだぬ
havana の発言:
  Win32の話なので
havana の発言:
  他だとどうなるかは知らん。

CPython インタープリタのソースコードを見る限りでは Thread / threading モジュールを使ってスレッドオブジェクトを作成してそれを run() させた場合はネイティブスレッドになるようですね。

|

« [ニッキ] 無礼者 | トップページ | [自作] L2 キャッシュ 512MB ? »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [ python ] Threading で作成されるスレッドはネイティブスレッド:

» [Django][Python][Mercurial][jQuery][その他]巡回 [常山日記]
Blog: [Django][本棚開発ログ] Django でユーザ管理をアウトソース Djangoを使ってみてる その2 Start django Python: Pylons - jQuery Autocomplete from returned AJAX XML: Example XML DATA Mercurial を Ubuntu で使う [Eclipse] Eclipseのインストール [Python][wxPyt... [続きを読む]

受信: 2007/09/24 01時00分

« [ニッキ] 無礼者 | トップページ | [自作] L2 キャッシュ 512MB ? »