C#-프로세스와 프로세스의 이해
프로세스
프로세스(Process)는 Windows 시스템의 기본 개념으로 프로그램을 실행하는 데 필요한 자원을 포함한다.실행 중인 프로그램은 운영체제에서 하나의 프로세스로 간주되며, 프로세스는 하나 이상의 루트를 포함할 수 있다.프로그램은 특정 운영체제에서 실행할 수 있는 파일로 정적 개념이다.프로세스는 프로그램의 동적 개념으로 여겨질 수 있으며 자신의 주소 공간을 가지고 일부 조작을 수행할 수 있다.프로그램의 실행은 프로세스의 생성과 수반되며, 한 프로그램의 실행은 하나 이상의 프로세스를 생성한다.
라인
스레드는 프로세스의 실체로서 독립적으로 운행하고 독립적으로 스케줄링하는 기본 단위이다. (CPU에서 진정으로 운행하는 것은 스레드이다.)루틴 자체는 기본적으로 시스템 자원을 가지고 있지 않으며, 실행 중 없어서는 안 될 자원 (예를 들어 프로그램 카운터, 레지스터, 창고) 만 가지고 있지만, 같은 프로세스에 속하는 다른 루틴과 프로세스가 가지고 있는 모든 자원을 공유할 수 있다.에 있습니다.NET에서는 일반적으로 Main () 방법을 입구로 하는데, 이 방법을 호출하면 자동으로 주 스레드가 생성됩니다.스레드는 CPU 레지스터, 호출 스택, 스레드 로컬 스토리지(Thread Local Storage, TLS)로 구성됩니다.CPU 레지스터는 CPU 내부에서 데이터를 저장하는 데 사용되는 일부 소형 저장 구역으로 연산에 참여하는 데이터와 연산 결과를 잠시 저장한다.사실 레지스터는 흔히 사용하는 시차 논리 회로이지만 이런 시차 논리 회로는 저장 회로만 포함하고 라인에서 현재 실행된 라인의 상태를 주로 기록한다.호출 창고는 실행 중인 하위 프로그램의 되돌아오는 주소를 저장하는 창고입니다. 이 창고는 주로 라인에서 호출된 메모리와 데이터를 유지하는 데 사용되며, 호출 창고에 접근하면 호출된 하위 프로그램을 찾을 수 있습니다.TLS는 정적 및 동적 두 가지로 나뉘는데 그것이 바로 스택의 전역 변수 또는 정적 변수를 바탕으로 데이터에 접근하는 것이다. 주로 데이터와 실행하는 특정한 스레드를 연결하는 데 사용된다.
구별하다
다중 스레드
멀티스레드 단계 만들기:
1. 라인을 작성하여 실행할 방법.
2. Thread 클래스를 실례화하고 실행할 방법을 가리키는 의뢰(ThreadStart 또는 ParameterizedThreadStart)를 전달합니다.Thread thread = new Thread (new Thread Start (method) - 이 위임에서 매개 변수로 사용하는 방법에는 매개 변수가 필요하지 않으며 반환 값이 없습니다.별도로 쓰기: ThreadStart threadStart = new ThreadStart(Calculate);Thread thread=new Thread(threadStart); ParameterizedThreadStart는 스레드에 매개 변수를 전달할 수 있는 방법을 의뢰할 수 있습니다. 매개 변수 형식은 Object의 것이어야 합니다.
3. Thread 실례를 호출하는 Start 방법.thread.Start();
스레드 속성
다음 프로그램에는 비교적 자주 사용하는 속성들이 열거되어 있다.
using System;
using System.Threading;
namespace
{
class Program
{
static void Main(string[] args)
{
Thread thread1 = new Thread(new ThreadStart(Thread1));
//thread1.IsBackground = true;//
thread1.Start();
//
Thread thread=Thread.CurrentThread;
thread.Name = " ";
//
int id = thread1.ManagedThreadId;
//
ThreadState state = thread1.ThreadState;
//
ThreadPriority priority = thread1.Priority;
//
//thread1.Suspend();
//thread1.Abort();
string str = string.Format("Thread ID:{0}
" + "Thread Name:{1}
" + "Thread State:{2}
" + "Thread Priority:{3}
", id, thread.Name,state, priority);
Console.WriteLine(str);
Console.ReadKey();
}
static void Thread1()
{
Console.WriteLine(" !");
}
}
}
동기
스레드의 동기화란 같은 시간에 한 스레드만 변수에 접근할 수 있는 것을 말한다. 다중 스레드 프로그램에 있어 키워드 Lock을 사용해야 한다. 코드를 상호 배척 세그먼트로 정의할 수 있다. 상호 배척 세그먼트는 한 시간 안에 한 스레드만 실행에 들어갈 수 있고 다른 스레드는 기다려야 한다.Lock(expression) {statement block} 클래스의 예를 잠그면this를 사용하고 클래스 내의 방법에서lock(this)을 사용할 수 있습니다.정적 변수를 잠그면 클래스 이름을 사용합니다.
스레드 간 액세스
크로스 라인을 완성하려면 방법을 다시 사용해야 한다.
namespace 1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//
private delegate void setTextValueCallBack();
//
private setTextValueCallBack a;
private void button1_Click(object sender, EventArgs e)
{
//
a = new setTextValueCallBack(SetValue);
//
Thread thread = new Thread(new ThreadStart(Test));
//
thread.IsBackground = true;
thread.Start();
}
private void Test()
{
// ,invoke , .invoke( , ( )).invoke ( )、begininvoke ( )
textBox1.Invoke(a);
}
///
///
///
private void SetValue()
{
this.textBox1.Text = "1";
}
}
}
참조 링크는 다음과 같습니다. C#다중 스레드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.