逐次化とは? わかりやすく解説

シリアライズ

(逐次化 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/05/03 09:20 UTC 版)

コンピュータプログラミングにおいて、シリアライズ (: serialize) もしくはシリアル化という用語は、次のような異なる2つの意味を有する。

  1. コンピュータ実行時の用語として:一つあるいは複数の「コンピュータ資源」(コンピュータ作動時に必要なもの、通常プログラム実行時に要求されるコンピュータリソース。具体例:CPUメモリ、入出力先など)を、複数の主体(具体例:プログラム)が利用しようとする際、一時点に一つの主体だけが利用するように、順番づけて調整すること。訳語は逐次化。対義語は並列化
  2. プログラミング用語として:一つまたは複数のデータファイル、あるいは一つまたは複数のオブジェクトといった、概念的あるいは事実上、複数の別のものとして取り扱っているエンティティを、例えばネットワーク経由で転送する、ストレージに一時格納するなどの目的で、「一つのまとまりとして取り扱う必要」がある場合、「階層をもたないフラットな(直線的な)データ構造に変換する」こと。訳語は直列化オブジェクト指向プログラミングでは同義語としてマーシャリング (marshalling) がある。対義語はデシリアライズ(訳語は直列化復元)である。

シリアライズの名詞形はシリアライゼーション (serialization) である。

概要

逐次化

第一の意味の逐次化(ちくじか)は、主としてマルチスレッドプログラミングにおいて使われる用語である。ある資源が複数のスレッドから同時にアクセスされても破綻することのないように、同時のアクセス要求が起こったときには、それぞれのスレッドが順番にその資源を利用するように調整(調停)することを逐次化という。逐次化によりプログラムはスレッドセーフとなる。これは一般には、その資源をロックできたひとつのスレッドのみがその資源の利用権を得て、ロック中には他のスレッドはその資源をロックできないような機構(排他制御)を用いるか、あるいはアトミック命令を利用したロックフリーのアルゴリズムを利用することにより実現される[1]。長時間のロックによりスループットが低下することを避けるために、データや要求をいったんキューに入れ、順次取り出して処理する(遅延実行する)ことによりスループットを改善することもあるが、複数のスレッドで共有されるキュー自体の操作はやはり排他制御する必要がある。そのほか、複数のプロセスが同一の資源(ファイルなど)にアクセスするような場合も破綻しないように、同様に何らかの逐次化が必要となる。

直列化

第二の意味の直列化(ちょくれつか)は、主にオブジェクト指向プログラミングにおいて使われる用語である。集合型や階層型の構造を持つ複雑なデータやオブジェクトは、配列連結リスト、ツリーマップなどのネットワーク(グラフ)構造となるが、メモリ上で連続しているとは限らない。ある環境において存在しているオブジェクトを、連続する(シリアルな)バイナリデータやテキストデータ(文字列)に変換することを直列化という。より具体的には、そのオブジェクトの状態を表す変数(フィールド)の集合と、場合によってはオブジェクトの種類(型、クラス)を表すなんらかの識別子を、バイナリやテキストに変換する。これにより、オブジェクトの表すデータを、ファイルとして保存したり、ネットワーク経由で送信したりすることができるようになる。このようにして得られたバイナリやテキストは、デシリアライズによって、元のオブジェクトに復元される。

テキストとしてシリアライズする際のフォーマットとしては、数あるテキストファイル形式の中でも規格として標準化されていて、階層構造の表現をサポートし、デシリアライズが比較的容易なXMLJSONなどがよく使われる。テキストエンコーディングの文字集合には古くから様々な形式が存在するが、Unicodeが普及してからはUTF-8が使われることが多い。UTF-8では、ASCIIの範囲内であれば各文字が1バイト以内(7ビット)で表現できることから、ASCII文字の占める割合が多いデータの場合はシリアライズ後のデータ容量が節約できる。また、バイト単位のエンコーディングであり、エンディアンの影響を受けないというメリットもある。非ASCII文字はマルチバイト文字として表現する必要があるが、日本語のようなマルチバイト文字の占める割合が多いデータの場合は、UTF-8よりもUTF-16のほうがデータ容量を節約できることもある。数値データが多い場合は、バイナリ形式を利用するとさらに容量を節約できるが、もとのオブジェクトを拡張した場合でも互換性を維持するためには、テキスト形式と比べてフォーマット設計の難易度が上がる。なお、浮動小数点数を10進数表記の文字列としてシリアライズすると丸め誤差が発生し、デシリアライズの際に情報を正確に復元できないことがある。

また、メモリ上のオブジェクトを直列化してストレージ上のファイルなどの永続記憶に保存することを永続化という。

各プログラミング言語の対応

Java

Javaではシリアライズしたいクラスにjava.io.Serializableまたはjava.io.Externalizableインタフェースを実装することで、そのクラスオブジェクトをシリアライズできる[2]。これらのインタフェースのうち、Serializableマーカーインタフェースと呼ばれる、メソッド宣言がないものである。このインタフェースは、直列化可能であるという意味を識別する機能だけを備えている。

.NET

.NET Framework/.NET Coreは、各種の属性による修飾を使用したシリアライズの制御をサポートする[3][4]ISerializableインターフェイス[5]を用いる方法も用意されているが、シリアル化の制御では属性を利用した方法が優先される。

BinaryFormatterを使うことでバイナリ形式のシリアライズをすることもできるが、バイナリシリアル化はセキュリティ上の危険性があり、推奨されていない[6][7]

.NET CoreではJSONシリアライズもサポートする[8]

Windows Communication Foundation (WCF) では、データコントラクトを利用してオブジェクトのシリアライズに関するメタデータを記述することで、プロセス間で.NETオブジェクトを簡単に送受信できるようになっている[9]

PHP

PHPでは標準で実装しており、シリアライズはserialize()、デシリアライズはunserialize()を使う。オブジェクトをシリアライズするとメソッドを除いて保存される[10]

脚注

出典

  1. ^ CON09-C. ロックフリープログラミングの手法を使うときは ABA 問題を避ける”. JPCERT/CC (2014年6月9日). 2024年2月23日閲覧。
  2. ^ Javaオブジェクト直列化仕様”. オラクル. 2007年12月8日閲覧。
  3. ^ dotnet-bot. “Custom binary serialization” (英語). learn.microsoft.com. 2022年2月23日閲覧。
  4. ^ gewarren. “属性を使用した XML シリアル化の制御 - .NET”. learn.microsoft.com. 2022年2月23日閲覧。
  5. ^ dotnet-bot. “ISerializable Interface (System.Runtime.Serialization)” (英語). learn.microsoft.com. 2022年2月23日閲覧。
  6. ^ ViktorHofer. “Binary serialization” (英語). learn.microsoft.com. 2022年2月23日閲覧。
  7. ^ GrabYourPitchforks. “BinaryFormatter および関連する型を使用するときの逆シリアル化のリスク - .NET”. learn.microsoft.com. 2022年2月23日閲覧。
  8. ^ gewarren. “C を使用して JSON をシリアル化および逆シリアル化する# - .NET”. learn.microsoft.com. 2022年2月23日閲覧。
  9. ^ HongGit. “データ コントラクトの使用 - WCF”. learn.microsoft.com. 2022年2月23日閲覧。
  10. ^ PHP: オブジェクトのシリアライズ - Manual”. PHP Group. 2020年8月27日閲覧。

関連項目


逐次化

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/23 18:49 UTC 版)

シリアライズ」の記事における「逐次化」の解説

第一の意味の逐次化(ちくじか)は、主としてマルチスレッドプログラミングにおいて使われる用語である。ある資源複数スレッドから同時にアクセスされても破綻することのないように、同時アクセス要求起こったときにはそれぞれのスレッド順番にその資源利用するように調整調停)することを逐次化という。逐次化によりプログラムスレッドセーフとなる。これは一般には、その資源ロックできたひとつのスレッドのみがその資源利用権得てロック中には他のスレッドはその資源ロックできないような機構排他制御)を用いるか、あるいはアトミック命令利用したロックフリーのアルゴリズム利用することにより実現される長時間ロックによりスループット低下することを避けるために、データ要求をいったんキュー入れ順次取り出して処理する遅延実行する)ことによりスループット改善することもあるが、複数スレッド共有されるキュー自体操作はやはり排他制御する必要があるそのほか複数プロセス同一資源ファイルなど)にアクセスするような場合破綻しないように、同様に何らかの逐次化が必要となる。 詳細は「同期 (計算機科学)」を参照

※この「逐次化」の解説は、「シリアライズ」の解説の一部です。
「逐次化」を含む「シリアライズ」の記事については、「シリアライズ」の概要を参照ください。

ウィキペディア小見出し辞書の「逐次化」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「逐次化」の関連用語

逐次化のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



逐次化のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのシリアライズ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのシリアライズ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS