「Bitcoin Core 0.11 (ch 3): Initialization and Startup」を編集中

移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
4行目: 4行目:
 
==プログラムエントリポイント==
 
==プログラムエントリポイント==
  
プログラムのエントリポイントは<u> bitcoind.cpp </u>にあります。
+
プログラムのエントリポイントは<u> bitcoind.cpp </ u>にあります。
  
 
main()はコードの3行です:
 
main()はコードの3行です:
12行目: 12行目:
  
  
AppInit:これは<u> bitcoind.cpp </u>の近くにあります。
+
AppInit:これは<u> bitcoind.cpp </ u>の近くにあります。
 
*コマンドラインを解析する
 
*コマンドラインを解析する
 
*データディレクトリを開きます。
 
*データディレクトリを開きます。
 
*設定ファイルを読み込みます
 
*設定ファイルを読み込みます
 
*プロセスをフォークします(デーモンとして実行している場合)
 
*プロセスをフォークします(デーモンとして実行している場合)
*コントロールを<u> init.cpp </u>にあるAppInit2()に渡します。
+
*コントロールを<u> init.cpp </ u>にあるAppInit2()に渡します。
  
  
==初期化ステップ(<u> init.cpp </u>)==
+
==初期化ステップ(<u> init.cpp </ u>)==
  
 
AppInit2()はビットコインシステムを初期化します。
 
AppInit2()はビットコインシステムを初期化します。
26行目: 26行目:
 
これには約800行のコードが含まれており、12段階に分かれています。
 
これには約800行のコードが含まれており、12段階に分かれています。
  
各ステップが始まる場所は、コードに文書化されています。 <u> Init.cpp </u>にはファイルの先頭にいくつかの関数がありますが、大部分はAppInit2()で構成されています。
+
各ステップが始まる場所は、コードに文書化されています。 <u> Init.cpp </ u>にはファイルの先頭にいくつかの関数がありますが、大部分はAppInit2()で構成されています。
  
 
次の表は、手順をまとめたものです。
 
次の表は、手順をまとめたものです。
94行目: 94行目:
  
  
AppInit2が終了すると、<u> bitcoind.cpp </u>のAppInit()に戻ります。
+
AppInit2が終了すると、<u> bitcoind.cpp </ u>のAppInit()に戻ります。
  
そこで、コードのトップレベルスレッドは、WaitForShutdown()という関数で無期限にループします。 2秒間スリープ状態になり、ユーザーがctrl-Cを押したかどうかを確認します。 その場合は、<u> init.cpp </u>でShutdown()を呼び出します。
+
そこで、コードのトップレベルスレッドは、WaitForShutdown()という関数で無期限にループします。 2秒間スリープ状態になり、ユーザーがctrl-Cを押したかどうかを確認します。 その場合は、<u> init.cpp </ u>でShutdown()を呼び出します。
  
 
シャットダウン()は、RPCサーバーをシャットダウンし、ノードを停止し、シグナルハンドラの登録を解除し、プログラムが完了します。
 
シャットダウン()は、RPCサーバーをシャットダウンし、ノードを停止し、シグナルハンドラの登録を解除し、プログラムが完了します。
102行目: 102行目:
 
==キャッシュサイズ==
 
==キャッシュサイズ==
  
ステップ7は、キャッシュサイズを初期化した。手順7で考えられる3つのキャッシュがあります.2つはLevelDBデータベースキャッシュであり、もう1つはコインキャッシュであり、そのサイズは<u> main.cpp </u>のフラッシュコードによって管理されます。
+
ステップ7は、キャッシュサイズを初期化した。手順7で考えられる3つのキャッシュがあります.2つはLevelDBデータベースキャッシュであり、もう1つはコインキャッシュであり、そのサイズは<u> main.cpp </ u>のフラッシュコードによって管理されます。
  
 
ユーザーは、-dbcacheを使用して合計キャッシュ・サイズを割り当てることができます。ユーザーは、特定の各キャッシュに割り当てるスペースを選択して選択することはできません。デフォルトの合計キャッシュサイズ= 100MB(最大:4GB、最小:4MB)。
 
ユーザーは、-dbcacheを使用して合計キャッシュ・サイズを割り当てることができます。ユーザーは、特定の各キャッシュに割り当てるスペースを選択して選択することはできません。デフォルトの合計キャッシュサイズ= 100MB(最大:4GB、最小:4MB)。
122行目: 122行目:
 
'' '3)UTXOインメモリキャッシュ' ''
 
'' '3)UTXOインメモリキャッシュ' ''
  
これは<u> main.cpp </u>コードで管理されるコインキャッシュです。 (FlushStateToDiskおよび関連する関数を参照)
+
これは<u> main.cpp </ u>コードで管理されるコインキャッシュです。 (FlushStateToDiskおよび関連する関数を参照)
  
変数(nCoinsCache)は、<u> main.h </u>のexternとして宣言されています。 <u> main.cpp </u>には、5000 * 300にハードコードされています(メモリ内コインは約300バイトなので5000コインを意味します)。しかし、ステップ7で再初期​​化する必要があります。
+
変数(nCoinsCache)は、<u> main.h </ u>のexternとして宣言されています。 <u> main.cpp </ u>には、5000 * 300にハードコードされています(メモリ内コインは約300バイトなので5000コインを意味します)。しかし、ステップ7で再初期​​化する必要があります。
  
 
このキャッシュには残りのキャッシュ領域がすべて与えられます。
 
このキャッシュには残りのキャッシュ領域がすべて与えられます。
138行目: 138行目:
 
つまり、プログラムの活動の大部分がメッセージングスレッド(ThreadMessageHandler - 以下を参照)で行われるということです。   
 
つまり、プログラムの活動の大部分がメッセージングスレッド(ThreadMessageHandler - 以下を参照)で行われるということです。   
  
ほとんどすべてのスレッドは、プログラムの起動時にスタック上に作成される単一のマスタースレッドグループの一部です(<u> bitcoind.cpp </u>を参照)。このスレッドグループはいくつかの子スレッドを生成する<u> init.cpp </u>に渡されます(いくつかのスクリプト検査スレッドを含みますが、これらはすべて別個のグループではなくマスタースレッドグループの一部です)。
+
ほとんどすべてのスレッドは、プログラムの起動時にスタック上に作成される単一のマスタースレッドグループの一部です(<u> bitcoind.cpp </ u>を参照)。このスレッドグループはいくつかの子スレッドを生成する<u> init.cpp </ u>に渡されます(いくつかのスクリプト検査スレッドを含みますが、これらはすべて別個のグループではなくマスタースレッドグループの一部です)。
  
スレッドグループは<u> net.cpp </u>に渡され、メッセージ処理スレッドを含むネットワーキングスレッドが作成されます。
+
スレッドグループは<u> net.cpp </ u>に渡され、メッセージ処理スレッドを含むネットワーキングスレッドが作成されます。
  
 
2つの他のスレッドグループはタスク固有です。
 
2つの他のスレッドグループはタスク固有です。
* rpcサーバースレッドグループ(<r> rpcserver.h / cpp </u>を参照)
+
* rpcサーバースレッドグループ(<r> rpcserver.h / cpp </ u>を参照)
 
* minerスレッドグループ
 
* minerスレッドグループ
  
150行目: 150行目:
 
'' '子スレッド' ''
 
'' '子スレッド' ''
  
親スレッド(プログラムが動作を開始するスレッドを意味する)は、ほとんどすべてのプログラムの作業を子スレッドに委譲します。 <u> init.cpp </u>と<u> net.cpp </u>でスレッドを生成した後、親スレッドは単にシャットダウンコマンドを待ちます。スレッドグループを開き、シャットダウンを続行します。
+
親スレッド(プログラムが動作を開始するスレッドを意味する)は、ほとんどすべてのプログラムの作業を子スレッドに委譲します。 <u> init.cpp </ u>と<u> net.cpp </ u>でスレッドを生成した後、親スレッドは単にシャットダウンコマンドを待ちます。スレッドグループを開き、シャットダウンを続行します。
  
 
子スレッドは、作成された順にリストされています。
 
子スレッドは、作成された順にリストされています。
156行目: 156行目:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! スレッド !! いつ / どこで作成されました !! 説明
+
! Thread !! When / Where Created !! Description
 
|-
 
|-
| スクリプトチェック || ステップ4<br>init.cpp || これはスレッドのセットで、デフォルトでは4です。<br>スクリプトチェック(署名チェックを含む)は高価なので、別のスレッドで処理されます。
+
| Script-checking || Step 4<br>init.cpp || This is a set of threads - 4 by default.<br>Script-checking (including signature checking) is expensive so is handled in separate threads.
 
|-
 
|-
| スケジューラ || ステップ4<br>init.cpp ||  スケジューラスレッド。<br> (TODO: describe)
+
| Scheduler || Step 4<br>init.cpp ||  Scheduler thread.<br> (TODO: describe)
 
|-
 
|-
| RPCスレッド || ステップ4<br>rpcserver.cpp ||  RPCサーバーが有効な場合は、RPC呼び出しを処理するスレッドのグループを開始します。
+
| RPC Threads || Step 4<br>rpcserver.cpp ||  If RPC server enabled, start a group of threads to handle RPC calls.
 
|-
 
|-
| インポート || ステップ10<br>init.cpp ||  ブロックをインポートします。 3つのシナリオ:<br>1)再インデックス(blk ??? datファイルからすべての既知のブロックを再スキャンする)。<br>2)ブートストラップ(bootstrap.datをネットワークからの完全なIBDの代わりに使用します)。<br>3)-loadblock(特定のblk ???。datファイルをスキャンする) - これらのどれも適用されない場合、このスレッドは何もしません。
+
| Import || Step 10<br>init.cpp ||  Imports blocks. Three scenarios:<br>1) Reindex (rescan all known blocks from blk???.dat files).<br>2) Bootstrap (use bootstrap.dat as an alternative to full IBD from the network.)<br>3) -loadblock (scan a specific blk???.dat file)<br>If none of those apply, this thread does nothing.
 
|-
 
|-
| DNSアドレスシード || ステップ11<br>net.cpp || dnsシードに基づいてIPアドレスのベクトルを構築しようとし、ベクトルとスレッドを終了します。<br>2014年6月のテストでは、これには約4秒かかり、158のアドレスが見つかりました。
+
| DNSAddressSeed || Step 11<br>net.cpp || Attempts to build a vector of IP addresses based on the dns seeds, stores the vector and the thread exits.<br>In a test in June 2014, this took about 4 seconds and found 158 addresses.
 
|-
 
|-
| プラグ&プレイ || ステップ11<br>net.cpp ||  UPNP(ユニバーサルプラグ&プレイ) <br>UPNPのポートマッピングを扱う。
+
| Plug & Play || Step 11<br>net.cpp ||  UPNP (Universal Plug & Play) <br>Deals with port mapping for UPNP.
 
|-
 
|-
| SocketHandler || ステップ11<br>net.cpp || <u>このスレッドはソケットをサービスします:</u><br>関連するすべてのソケットのI / Oを50msのタイムアウトで待機します。<br>リスニングソケットで新しい着信接続を処理し、新しいピアのCNodeを作成します。<br>データストリームを受信して送信します。<br>何もしなかったソケットを切断状態に設定します。
+
| SocketHandler || Step 11<br>net.cpp || <u>This thread services the sockets:</u><br>Waits for I/O on all the relevant sockets with a 50ms timeout.<br>Processes new incoming connections on listening socket and creates a CNode for the new peer.<br>Receives and sends data streams.<br>Sets sockets that have not done anything to a disconnected state.
 
|-
 
|-
| OpenAddedConnections || ステップ11<br>net.cpp || -addnodeパラメーターを使用して、ユーザーが指定したアウトバウンド接続を開始します。<br>接続できない場合、各サイクルで2分間スリープします。
+
| OpenAddedConnections || Step 11<br>net.cpp || Initiates outbound connections specified by the user with the –addnode parameter.<br>If can't connect, sleeps for 2 minutes each cycle.
 
|-
 
|-
| OpenConnections || ステップ11<br>net.cpp || DNSシードから他のアウトバウンド接続を開始する(失敗した場合、固定シードに基づいてノードを見つける)<br>接続できない場合、各サイクルで500ミリ秒間スリープします。
+
| OpenConnections || Step 11<br>net.cpp || Initiates other outbound connections from DNS seeds (if that fails, find nodes based on fixed seeds)<br>If can't connect, sleeps for 500 milliseconds each cycle.
 
|-
 
|-
| MessageHandler || ステップ11<br>net.cpp || <u>これがプログラムの主なスレッドです。</u> <br> このスレッドはwhile(true)ループを実行し、メッセージの送受信を行います。 (参照 <u>net.cpp</u>:1049) <br>このコードでは、boost :: signals2を使用してmain.cppのProcessMessages関数とSendMessages関数を呼び出します。<br>(シグナルを導入するコードはPR 2154にあります - そのプルで最後から2番目のコミットを参照してください)。<br>ProcessMessageとSendMessageはこのスレッドで実行されます。<br>したがって、<u> main.cpp </u>のコードのほとんどはこのスレッドで実行されます。
+
| MessageHandler || Step 11<br>net.cpp || <u>This is the program's main thread.</u> <br> This thread runs a while(true) loop, receiving and sending messages. (See <u>net.cpp</u>:1049) <br>The code uses boost::signals2 to call the ProcessMessages and SendMessages functions in main.cpp.<br>(The code introducing signals is in PR 2154 - see the next-to-last commit in that pull.)<br>ProcessMessage and SendMessage run in this thread.<br>So, most of the code in <u>main.cpp</u> runs in this thread.
 
|-
 
|-
| ウォレットフリュッシャー || ステップ12<br>init.cpp || ウォレットが有効な場合、このスレッドは定期的にウォレットをフラッシュします。
+
| Wallet Flusher || Step 12<br>init.cpp || If wallet is enabled, this thread flushes the wallet periodically.
 
|}
 
|}
  

tezos-wikiへの投稿はすべて、a Creative Commons Attribution-ShareAlike 3.0 License (詳細はTezos-wiki:著作権を参照)のもとで公開したと見なされることにご注意ください。 自分が書いたものが他の人に容赦なく編集され、自由に配布されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください。 著作権保護されている作品は、許諾なしに投稿しないでください!

取り消し | 編集の仕方 (新しいウィンドウで開きます)