>백엔드 개발 >C++ >익명의 파이프는 어떻게 C#에서 효율적인 프로세스 간 통신을 향상시킬 수 있습니까?

익명의 파이프는 어떻게 C#에서 효율적인 프로세스 간 통신을 향상시킬 수 있습니까?

DDD
DDD원래의
2025-01-26 22:06:10264검색

How Can Anonymous Pipes Enhance Efficient Inter-Process Communication in C#?

C#에서 익명 파이프를 사용하여 효율적인 프로세스 간 통신 달성

C#에서 상위 프로세스와 하위 프로세스 간의 통신을 설정할 때 효율성은 매우 중요합니다. 익명 파이프는 간단하면서도 효과적인 비동기식 이벤트 기반 통신 솔루션을 제공합니다.

익명 파이프는 프로세스 간 단방향 통신 채널입니다. 이를 통해 데이터를 비동기식으로 전송할 수 있으며 드물게 발생하는 통신을 처리하기 위한 전용 스레드가 필요하지 않습니다.

C#에서 익명 파이프를 구현하려면 System.IO.Pipes 네임스페이스를 사용할 수 있습니다. 클라이언트 및 서버 엔드포인트를 각각 생성하기 위한 NamedPipeClientStreamNamedPipeServerStream 클래스를 제공합니다.

클라이언트 구현

<code class="language-csharp">using System.IO.Pipes;
using System.Threading;

namespace ChildProcess
{
    class Program
    {
        static void Main(string[] args)
        {
            // 连接到服务器管道
            using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "MyPipe", PipeDirection.In))
            {
                pipeClient.Connect();

                // 启动一个线程来异步读取消息
                Thread readThread = new Thread(() => ReadMessages(pipeClient));
                readThread.Start();

                // 持续读取消息
                while (true)
                {
                    // 执行其他任务
                }
            }
        }

        static void ReadMessages(NamedPipeClientStream pipeClient)
        {
            while (true)
            {
                byte[] buffer = new byte[1024];
                int bytesRead = pipeClient.Read(buffer, 0, buffer.Length);
                if (bytesRead > 0)
                {
                    // 处理接收到的消息
                }
            }
        }
    }
}</code>

서버측 구현

<code class="language-csharp">using System.IO.Pipes;
using System.Threading.Tasks;

namespace ParentProcess
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建服务器管道
            using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("MyPipe", PipeDirection.Out))
            {
                // 等待客户端连接
                pipeServer.WaitForConnection();

                // 异步发送消息
                Task.Run(() => WriteMessages(pipeServer));
            }
        }

        static async void WriteMessages(NamedPipeServerStream pipeServer)
        {
            while (true)
            {
                // 执行其他任务

                // 向管道写入消息
                string message = "来自父进程的问候!";
                byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message);
                await pipeServer.WriteAsync(buffer, 0, buffer.Length);
            }
        }
    }
}</code>

이 방식은 전용 스레드의 오버헤드 없이 효율적이고 가벼운 프로세스 간 통신 방법을 제공합니다. 익명 파이프와 비동기 작업을 사용하여 실시간 이벤트 기반 통신을 보장합니다.

위 내용은 익명의 파이프는 어떻게 C#에서 효율적인 프로세스 간 통신을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.