2012-01-13 3 views
0

데이터베이스를 저장소로 사용하는 웹 응용 프로그램을 사용하는 경우 비즈니스 논리의 모든 DAL 호출이 동기화되지 않습니다.웹 서버에서 멀티 스레딩 C#

각 요청은 처리를위한 스레드로 지정되어 있습니다. 즉, db 액세스가 어떻게 든 다중 스레드된다는 것을 의미합니다.하지만 응용 프로그램에 동기화 코드가 없으며 마술처럼 작동합니다.

좀 관리되지 않는 코드에 대한 래퍼를 호출하는 비즈니스 로직을 가지고

질문은 다음이 될 것입니다. 관리되지 않는 코드에 대한 호출을 일부 동기화 코드로 보호해야합니까? #

관리되지 않는 DLL은 멀티 스레드가 아닙니다. 그것은 몇몇 파일을 접근하고 압축을 풉니 다.

답변

2

DATABASE에 액세스하는 스레드를 동기화 할 필요가 없습니다. "돌이킬 수없는"DB의 정의 속성 중 하나이므로 "감사합니다."

사용자 정의에 따라 관리되지 않는 DLL이이 속성을 공유하지 않기 때문에 다른 규칙이 적용되거나 충돌하고 레코딩됩니다.

거기 DLL에서 호출 할 때 웹 스레드 애플 리케이션 동기화

  • 되는 가장 일반적인 목표를 달성하기 위해 여러 가지 방법 : 이성애자 앞으로 코딩하지만 definitly 웹 서버의 상호 작용의 관점에서 연구 할 수있다 (deadlock, thread starvation anyone?)
  • DLL을 다른 프로세스로 랩핑합니다. 즉, "DLL 서버"를 만드십시오. 더 많은 작업을 수행 할 수 있지만 더 강력한 구현 일 수 있습니다.
3

데이터베이스 기본 사항을 익힐 수 있습니까?

데이터베이스 + 트랜잭션 - 데이터베이스 기본의 고유 한 부분 -이 당신을 위해 일하고 있습니다. 데이터베이스 그 자체는 여러 사용자가 여러 사용자 사이에서 액세스를 동기화 할뿐만 아니라 ACID 조건을 사용하고이를 사용하는 경우 개념을 중심으로 설계되었습니다.

당신이하는 일은 그들이하는 일보다 더 나쁩니다. 그리고 알지 못하면 어쨌든 비효율적으로 사용합니다.

+0

두 번째로, 웹 서버가있을 때마다 각 요청에 자체 스레드가 생성되어 감옥에서 실행됩니다. 그렇다면 언제 동기화가 필요합니까? 즉, appdomain에서 객체를 공유 할 때입니다. 그런 다음 어떤 종류의 잠금 장치가 필요합니다. – DarthVader

+0

@TomTom 그러나 사실, 그 질문에 전혀 대답하지 못했습니다. –

+0

db의 기본 사항을 익히는 데 걸리는 시간은 참입니다. – Elena

1

나는 각 요청 는 DB 액세스가 어떻게 든 다중 스레드되는 것을 의미 처리를위한 스레드를, 지정된 것을 알고있다 - 그러나 나는 앱에는 동기 코드를 본 적이있다 그것은 마술 작동합니다.

정확하지 않다고 생각합니다. 스레드의 실행은 DB 호출이 반환 될 때까지 중단됩니다.

나는 관리되지 않는 코드를 통해 래퍼를 호출하는 비즈니스 로직을 가지고 있습니다. 관리되지 않는 코드에 대한 호출이 일부 동기화 코드에 의해 보호되어야합니까? #

비 관리 코드의 파일에 액세스하는 프로세스가 여러 개 있는지 여부에 따라 달라집니다. 문제는 데이터의 일관성과 파일을 공유 모드로 열지 여부입니다. 그 외에는 동기화 할 필요가 없습니다.

1

대답은 쓰레드가 자신의 에있는 데이터를 공유하지 않는 한 이미 쓰여진 데이터베이스 코드와 대부분의 다른 웹 애플리케이션 관련 코드가 스레드 간의 자원 공유 액세스와 관련된 다중 쓰레드 문제를 처리한다는 것입니다 코드 (예 : 공유/정적 변수)를 사용하면 일반적으로 웹 응용 프로그램의 모든 항목을 수동으로 동기화 할 필요가 없습니다.

반면에 스레드 안전하지 않은 네이티브 라이브러리를 가져 와서 여러 스레드에서 호출하려는 경우 예, 모든 스레드간에 공유되므로 동기화해야합니다. 쓰여진 코드는 투명하게 작동하도록 쓰레드를 인식해야합니다.

1

코드에서 파일 시스템에 직접 액세스하는 경우 한 번에 둘 이상의 사용자가 시스템을 사용하면 충돌 할 가능성이 많습니다. 이 경우, 중간 계층의 일종은 데이터베이스 서버가 제공하는 기능 중 하나 인 디스크 액세스를 동기화해야합니다.

MS SQL Server와 같은 데이터베이스를 사용할 때 서버는 스레드가 서로 밟지 않도록 관리하며 RAM 및 디스크의 데이터에 대한 게이트 키퍼 역할을합니다. 실수로 테이블을 잠그면 오류가 발생할 수 있지만 제대로 구조화 된 응용 프로그램에서는 거의 발생하지 않습니다.

1

일반적으로 동기화가 필요하지 않습니다. 데이터베이스 코드가 차단되는 경향이 있기 때문입니다 (동기식). 일반적으로 데이터베이스 스레드와 웹 스레드 간에는 상호 작용이 없으며 호출에서 반환 된 결과를 얻는 것 외에는 없습니다.

비동기 웹 스레드를 사용하더라도 웹 스레드와 데이터베이스 스레드간에 실제 상호 작용이 없기 때문에 동기화할 필요가 있습니다.