KR100895929B1 - 애플리케이션 프레임워크를 비정형화한 비동기 컴포넌트를위한 메카니즘 - Google Patents

애플리케이션 프레임워크를 비정형화한 비동기 컴포넌트를위한 메카니즘 Download PDF

Info

Publication number
KR100895929B1
KR100895929B1 KR1020040043063A KR20040043063A KR100895929B1 KR 100895929 B1 KR100895929 B1 KR 100895929B1 KR 1020040043063 A KR1020040043063 A KR 1020040043063A KR 20040043063 A KR20040043063 A KR 20040043063A KR 100895929 B1 KR100895929 B1 KR 100895929B1
Authority
KR
South Korea
Prior art keywords
application
asynchronous operation
application framework
notification
thread
Prior art date
Application number
KR1020040043063A
Other languages
English (en)
Other versions
KR20040107414A (ko
Inventor
그레그 디. 쉑터
얀에릭 크리스텐센
마이클제이. 마루첵크
드미트리 롭스맨
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20040107414A publication Critical patent/KR20040107414A/ko
Application granted granted Critical
Publication of KR100895929B1 publication Critical patent/KR100895929B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Abstract

애플리케이션은 특정 애플리케이션 프레임워크에 따라서 작성된다. 컴포넌트는 애플리케이션에 결합된다. 비동기 오퍼레이션(asynchronous operation)이 수행될 때, 컴포넌트는 애플리케이션을 작성하는 데 이용되는 특정 애플리케이션 프레임워크와는 독립적인 방식으로 표준 함수 호출을 발행하도록 구성된다. 비동기 오퍼레이션 관리자는 애플리케이션을 작성하는 데에 이용되는 특정 애플리케이션 프레임워크를 감지하고, 표준 함수 호출을 수신하고, 애플리케이션 프레임워크의 스레딩 및 컨커런시 모델(threading and concurrency model)에 따라서 비동기 오퍼레이션을 수행하고, 비동기 오퍼레이션이 완료됐을 때 스레딩 및 컨커런시 모델에 따르는 방식으로 컴포넌트에게 통지가 발행되게 하도록 구성된다. 비동기 오퍼레이션 관리자는 애플리케이션 프레임워크 자체로부터 통지 또는 함수 호출을 수신함으로써 애플리케이션 프레임워크를 결정할 수 있다.
Figure R1020040043063
애플리케이션, 컴포넌트, 애플리케이션 프레임워크, 비동기 오퍼레이션, 비동기 오퍼레이션 관리자

Description

애플리케이션 프레임워크를 비정형화한 비동기 컴포넌트를 위한 메카니즘{MECHANISM FOR ASYNCHRONOUS COMPONENTS TO BE APPLICATION FRAMEWORK AGNOSTIC}
도 1은 본 발명의 특징을 구현할 수 있는 적절한 컴퓨팅 시스템을 도시하는 도면.
도 2는 애플리케이션 프레임워크에 따라서 작성된 애플리케이션에 결합되는 컴포넌트로부터 함수 호출을 수신함으로써 비동기 오퍼레이션을 용이하도록 할 수 있고, 복수의 프레임워크와 통신할 수 있는 비동기 오퍼레이션 관리자를 도시하는 도면.
도 3은 본 발명의 원리에 따라서 비동기 오퍼레이션 관리자가 비동기 오퍼레이션을 용이하게 하는 방법을 도시하는 도면.
<도면의 주요 부분에 대한 부호의 설명>
121: 프로세싱 유닛
135: 오퍼레이팅 시스템
138: 프로그램 데이터
201: 애플리케이션
202: 컴포넌트
203: 비동기 오퍼레이션 관리자
204: 애플리케이션 프레임워크
본 발명은 소프트웨어 개발 기술에 관한 것으로, 보다 상세히는 비동기 오퍼레이션 관리자가 비동기 컴포넌트가 결합되는 애플리케이션을 작성하는 데에 사용되는 특정 애플리케이션 프레임워크와 관계 없이 동일한 방법으로 비동기 컴포넌트가 비동기 오퍼레이션 관리자와 인터페이스하는 비동기 컴포넌트에의 표준화된 인터페이스를 제공하는 메카니즘에 관한 것이다.
컴퓨팅 기술은 우리가 작업하고 조작하는 방법을 변화시켜왔다. 컴퓨팅 기술은 상호 연결된 프로세싱, 메모리, 통신 장치 및 사용자 인터페이스 장치를 포함하는 정교한 하드웨어에 의존한다. 소프트웨어는 실질적으로 무한정한 다양한 애플리케이션을 사용가능하게 하기 위하여 이들 다양한 물리적 컴포넌트가 서로간 및 사용자와 상호 작용하는 방법을 제어한다.
소프트웨어는 사람인 프로그래머에 의해 소스 코드를 이용하여 가장 빈번하게 생성된다. 소스 코드는 사람인 프로그래머에게 비교적 인식가능한 언어 및 심볼을 포함한다. 그러나, 소스 코드는 프로세서가 직접적으로 해석할 수 없다. 따라서, 기능적인 소프트웨어를 얻기 위해, 소스 코드는 소프트웨어의 기능을 사용가능하게 하기 위해 수행해야하는 특정 행위가 무엇인지 프로세서에게 직접적으로 명 령할 수 있는 이진 명령어 및 데이터로 번역되거나 컴파일된다.
소프트웨어는 시간이 진행됨에 따라 점점 더 복잡해진다. 애플리케이션이 수천개의, 심지어는 수백만의 개별적인 이진 명령어를 포함하는 것은 결코 드문일이 아니다. 일단 특정의 보다 하위 레벨의 태스크를 수행하도록 컴포넌트가 작성됐다면, 그 특정 하위 레벨 태스크를 수행하는 복수의 다른 애플리케이션의 보다 상위 레벨의 기능이 매우 다르더라도 이 컴포넌트는 그 애플리케이션들에 결합될 수 있다는 사실에 의해 이러한 소프트웨어 개발의 빠른 발전이 널리 가능해졌다. 컴포넌트는, 실행될 때, 하나 이상의 기능을 구현하는 컴퓨터 실행가능 명령어의 분리된 집합이다. 컴포넌트는 다른 소프트웨어 컴포넌트 또는 애플리케이션에 의해 호출될 수 있다. 객체 지향 프로그래밍은 이를 가능하게 한다. 따라서, 애플리케이션 프로그래머는 컴포넌트와 적절하게 인터페이스하는 함수 호출을 배치함으로써 애플리케이션에 결합될 수 있는 매우 다양한 컴포넌트에의 액세스를 자주 갖는다. 애플리케이션들은 복수의 다른 컴포넌트들로 결합할 수 있다.
애플리케이션은 복수의 널리 이용되는 애플리케이션 프레임워크 중 하나를 이용하여 작성된다. 애플리케이션 프레임워크의 예는 윈도우즈 폼 클라이언트-사이드 사용자 인터페이스 프로그래밍 프레임워크(WINDOWS Forms client-side User Interface(UI) programming framework), 에이에스피닷넷 서버-사이드 UI 프로그래밍 및 HTTP 프레임워크(ASP.NET server-side UI programming and HTTP framework), 프리 스레디드 콘솔 애플리케이션(free threaded console application), SQL 서버에 임베딩된 애플리케이션들 및 다른 것들을 포함한다. 종래에는, 컴포넌트가 복 수의 애플리케이션 프레임워크 중 하나를 이용하여 작성되었을 수 있는 애플리케이션에 이용 가능하려면, 컴포넌트가 전형적으로 복수의 프레임워크 중 임의의 것을 따르는 애플리케이션에서 동작하도록 특별히 설계되고 작성되거나, 프레임워크들의 각각에 대응하는 컴포넌트가 존재해야 할 것이다.
비동기 오퍼레이션을 수행할 때 컴포넌트가 특정 애플리케이션 프레임워크를 고려한다는 것은 중요한 점이다. 비동기 오퍼레이션은 다른 프로세스는 진행 중인 반면 실행중의 다른 스레드에서는 혹은 하드웨어의 몇몇의 일부에서는 완료에 접근해 가는 연산이다. 비동기 오퍼레이션이 완료될 때, 이벤트 통지가 일어나 목표한 애플리케이션 프레임워크의 규칙의 컨텍스트(context)에서 그리고 그 규칙에 따라 작성된 코드를 실행한다. 그러나, 통지가 리턴되는 곳인 컨텍스트 및 스레드는 컴포넌트를 결합하는 애플리케이션을 작성하는 데에 사용되는 애플리케이션 프레임워크에 상당히 의존한다. 그러므로, 대응하는 애플리케이션 프레임워크에 의해 사용되는 특정 스레딩 및 컨커런시 모델에 따라서 통지가 발행될 때(그 다음 대응 통지를 애플리케이션으로 보낸다) 수신할 준비가 되어 있도록 하는 방식으로 컴포넌트가 작성될 수 있다. 그렇지 않으면, 비동기 오퍼레이션은 실패할 수 있다.
따라서, 비동기 오퍼레이션이 복수의 프레임워크에 걸쳐 동작하기 위하여, 한 개별적인 컴포넌트는 그 애플리케이션 프레임워크 중 하나에 대하여 작성되고, 한 개별적인 컴포넌트는 다른 애플리케이션 프레임워크에 대하여 작성되는 등 모든 애플리케이션 프레임워크에 대하여 작성된다. 대안으로는, 복수의 애플리케이션 프레임워크 중 임의의 하나와 동작하도록 컴포넌트가 작성될 수 있다. 그러나, 이 들 중 어느 경우에서도, 컴포넌트 작성자는 애플리케이션 프레임워크 각각의 스레딩 및 컨커런시 모델을 고려하고 명확하게 초벌 작성된 소스 코드를 통해 스레딩 및 컨커런시 모델 문제들을 해결하는 것이 필요하다.
따라서, 컴포넌트 작성자가 스레딩 및 컨커런시 모델과 같은 애플리케이션 프레임워크에 특정된 문제를 고려할 필요 없이 매우 다양한 애플리케이션 프레임워크 하에서 컴포넌트를 동작하게 하는 메카니즘이 바람직할 것이다. 특정 컴포넌트만이 특정 애플리케이션 프레임워크와 동작한다는 이유로 애플리케이션이 그것의 컴포넌트의 이용에 있어서 제한되지 않는다면 더 바람직할 것이다.
본 기술 분야의 종래의 상황이 갖는 상술한 문제들을 비동기 오퍼레이션 관리자가 컴포넌트로 하여금 컴포넌트를 결합하는 애플리케이션을 작성하는 데에 사용되는 애플리케이션 프레임워크와 관계 없이 표준화된 양식으로 비동기 오퍼레이션을 수행하게 하는 본 발명의 원리에 의해 해결될 수 있다. 이는 단일 컴포넌트가 애플리케이션을 작성하는 데에 어떤 애플리케이션 프레임워크가 사용되었는지에 관계 없이 비동기 오퍼레이션을 수행함과 함께, 그 단일 컴포넌트가 더욱 쉽게 작성되는 것을 허용한다.
본 발명의 원리에 따르면, 애플리케이션은 특정 애플리케이션 프레임워크에 따라서 작성된다. 컴포넌트는 애플리케이션에 결합된다. 비동기 오퍼레이션이 수행되고자 할 때, 컴포넌트는 애플리케이션을 작성하는 데에 이용되는 특정 애플리케이션 프레임워크와는 독립적인 방식으로 표준 함수 호출을 발행하도록 구성된다. 비동기 오퍼레이션 관리자는 애플리케이션을 작성하는 데에 사용되는 특정 애플리케이션 프레임워크를 감지하고, 표준 함수 호출을 수신하고, 애플리케이션 프레임워크의 스레딩 및 컨커런시 모델에 따라서 비동기 오퍼레이션을 수행하고, 비동기 오퍼레이션이 완료됐을 때 스레딩 및 컨커런시 모델에 따르는 방식으로 컴포넌트에 통지가 발행되게 하도록 구성된다. 비동기 오퍼레이션 관리자는 애플리케이션 프레임워크 자체로부터 통지 또는 함수 호출을 수신함으로써 애플리케이션 프레임워크를 결정할 수 있다.
본 발명의 추가적인 특징 및 이점은 이하의 설명에서 논의될 것이고, 일부는 이하의 설명으로부터 명백해지거나, 본 발명을 실시함으로써 터득될 수 있다. 본 발명의 특징 및 이점은 특허 청구 범위에서 구체적으로 기재하고 있는 수단 및 조합에 의하여 실현되고 얻어질 수 있다. 본 발명의 이들 및 다른 특징들은 이하의 설명 및 청구범위로부터 보다 완전히 명백해지거나, 본 명세서에 설명된 바와 같이 본 발명을 실시함으로써 알 수 있다.
본 발명의 상기 및 다른 이점 및 특징을 얻을 수 있는 방식을 설명하기 위하여, 간단히 상술한 본 발명의 더욱 상세한 설명이 첨부된 도면에 도시된 특정 실시예를 참조하여 이루어질 것이다. 이들 도면은 단지 본 발명의 전형적인 실시예를 도시할 뿐이므로, 본 발명의 범위를 제한하는 것으로 고려되어서는 안된다는 것을 이해하여야 하며, 본 발명은 첨부한 도면을 사용하여 추가적인 특성 및 세부사항과 함께 기술되고 설명될 것이다.
본 발명의 원리는 비동기 오퍼레이션 관리자가 컴포넌트로 하여금 컴포넌트를 통합하는 애플리케이션을 작성하는 데에 사용되는 애플리케이션 프레임워크에 관계 없이 표준화된 양식으로 비동기 오퍼레이션을 수행하게 하는 메카니즘에 관한 것이다. 이는 컴포넌트가 애플리케이션을 작성하는 데에 어떤 복수의 애플리케이션 프레임워크가 사용되었는지에 관계 없이 비동기 오퍼레이션을 수행하게 하는 한편, 단일 컴포넌트가 더욱 쉽게 작성되는 것을 허용한다.
본 발명의 범위 내의 실시예들은 컴퓨터 실행가능 명령어 또는 데이터 구조를 전달하거나 이들이 저장되어 있는 컴퓨터 판독가능 매체를 포함한다. 이러한 컴퓨터 판독가능 매체는 범용 또는 특수목적 컴퓨터에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있다. 예로서, 이러한 컴퓨터 판독가능 매체는 RAM, ROM, EEPROM, CD-ROM 또는 기타 광학 디스크 저장장치, 자기 디스크 저장장치 또는 기타 자기 저장 장치, 또는 컴퓨터 실행가능 명령이나 데이터 구조의 형태로 원하는 프로그램 코드 수단을 전달하거나 저장할 수 있고 범용 또는 특수목적 컴퓨터에 의해 액세스될 수 있는 임의의 기타 매체와 같은 물리적 컴퓨터 판독가능 매체를 포함할 수 있지만, 이에 한정되지 않는다.
정보가 네트워크 혹은 다른 통신 접속(유선, 무선 또는 유무선의 조합)을 통해 컴퓨터로 전송되거나 제공될 때, 컴퓨터는 당연히 이 접속을 컴퓨터 판독가능 매체로 본다. 그러므로, 이러한 접속은 당연히 컴퓨터 판독가능 매체로 칭한다. 상술한 것들의 조합들도 컴퓨터 판독가능 매체의 범위 안에 포함되어야 한다. 컴퓨터 실행가능 명령어는, 예를 들면, 범용 컴퓨터, 특수 목적 컴퓨터, 또는 특수 목적 컴퓨터 프로세싱 장치에게 특정 기능이나 기능의 그룹을 수행하게 하는 임의의 명령어 또는 데이터를 포함한다. 컴퓨터 실행가능 명령은, 예를 들면, 어셈블리 언어와 같은 이진, 중간 포맷 명령어, 또는 심지어 소스코드일 수 있다. 본 발명에서 요구사항은 아니지만, 네트워크 환경의 컴퓨터에서 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어의 관점에서 일반적으로 기술하기로 한다. 통상적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 타입을 구현하는, 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조, 등을 포함한다.
본 기술분야에서 숙련된 기술을 가진자들은 본 발명이 퍼스널 컴퓨터, 핸드헬드(hand-held) 장치, 멀티 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능한 가전제품(programmable consumer electronics), 네트워크 PC, 미니 컴퓨터, 메인프레임 컴퓨터, 등을 포함한 다양한 유형의 컴퓨터 시스템 구성을 구비한 네트워크 컴퓨팅 환경에서 실행될 수 있다는 것을 알 수 있다. 본 발명은 또한 통신 네트워크를 통하여 (유선 링크, 무선 링크, 또는 유선이나 무선 링크들의 조합에 의해) 연결된 국부 또는 원격 프로세싱 장치에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서도 실행될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 국부 및 원격 메모리 저장 장치에 위치할수 있다.
도 1은 본 발명의 원리가 컴퓨터(120)의 형태로 사용될 수 있는 적절한 컴퓨팅 환경을 도시한다. 컴퓨터(120)는 프로세싱 유닛(121), 시스템 메모리(122), 및 시스템 메모리(122)를 포함하는 다양한 시스템 컴포넌트를 프로세싱 유닛(121)에 연결하는 시스템 버스(123)를 포함한다.
시스템 버스(123)는 다양한 버스 아키텍처 중의 임의의 것을 사용하는 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 및 로컬 버스를 포함하는 몇가지 유형의 버스 구조 중의 임의의 것이 될 수 있다. 시스템 메모리는 ROM(124) 및 RAM(125)을 포함한다. 시동중에 컴퓨터(120) 내의 구성요소들 간에 정보를 전송하는 것을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(126; BIOS)은 ROM(124)에 저장될 수 있다.
컴퓨터(120)는 자기 하드 디스크(139)로부터 판독하거나 그 자기 하드 디스크에 기록하는 자기 하드 디스크 드라이브(127), 분리형 자기 디스크(139)로부터 판독하거나 그 자기 디스크에 기록하는 자기 디스크 드라이브(128), 및 CD-ROM 또는 다른 광 매체와 같은 분리형 광 디스크(131)로부터 판독하거나 그 광 디스크에 기록하는 광 디스크 드라이브(130)도 포함할 수 있다. 자기 하드 디스크 드라이브(127), 자기 디스크 드라이브(128), 및 광 디스크 드라이브(130)는 각각, 하드 디스크 드라이브 인터페이스(132), 자기 디스크 드라이브 인터페이스(133), 및 광학 드라이브 인터페이스(134)에 의해 시스템 버스(123)에 접속된다. 이들 드라이브 및 그것과 관련된 컴퓨터 판독가능 매체는 컴퓨터(120)에 대한 컴퓨터 실행가능 명령어, 데이터 구조, 프로그램 모듈, 및 다른 데이터의 비휘발성 저장 기능을 제공한다. 본 명세서에서 기술된 예시적인 환경은 자기 하드 디스크(139), 분리형 자기 디스크(129) 및 분리형 광 디스크(131)가 사용됐지만, 자기 카세트, 플래시 메모리 카드, 디지털 비디오 디스크, 베루누이 카트리지, RAM, ROM, 등을 포함하는, 데이터를 저장하는 다른 유형의 컴퓨터 판독가능 매체가 사용될 수 있다.
오퍼레이팅 시스템(135), 하나 이상의 애플리케이션 프로그램(136), 기타 프로그램 모듈들(137), 및 프로그램 데이터(138)를 포함하는, 하나 이상의 프로그램 모듈을 포함하는 프로그램 코드 수단은 하드 디스크(139), 자기 디스크(129), 광 디스크(131), ROM(124) 또는 RAM(125)에 저장될 수 있다. 사용자는 키보드(140), 포인팅 장치(142), 또는 마이크로폰, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등과 같은 (도시되지 않은) 다른 입력 장치들을 통해 컴퓨터(120)에 명령 및 정보를 입력할 수 있다. 이들 입력 장치 및 그외의 입력 장치는 시스템 버스(123)에 연결된 직렬 포트 인터페이스(146)를 통해 종종 프로세싱 유닛(121)에 접속된다. 다른 대안으로는, 입력 장치는 병렬 포트, 게임 포트 또는 유니버설 시리얼 포트(USB) 와 같은 기타 인터페이스에 의해 접속될 수 있다. 모니터(147) 또는 다른 디스플레이 장치는 비디오 어댑터(148) 등의 인터페이스를 통해 시스템 버스(123)에 접속된다. 모니터 외에도, 퍼스널 컴퓨터는 통상적으로 스피커 및 프린터 등의 (도시되지 않은) 기타 주변 출력 장치를 포함한다.
컴퓨터(120)는 원격 컴퓨터(149a 및 149b)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 이용한 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(149a 및 149b)는 각각 다른 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어(peer) 장치 또는 기타 공통 네트워크 노드일 수 있으며, 도 1에는 메모리 저장 장치(150a 및 150b) 및 그와 관련된 애플리케이션 프로그램(136a 및 136b)만이 도시되어 있지만, 컴퓨터에 관하여 상술한 구성요소 중 다수 또는 모든 구성요소를 일반적으로 포함할 수 있다. 도 1에 도시된 논리 접속은 본 도면에서 예로서 도시된 근거리 통신망(LAN; 151) 및 원거리 통신망(WAN; 152)이 포함되지만 이에 한정되지 않는다. 이러한 네트워킹 환경은 사무실 광역 또는 기업 광역 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(120)는 네트워크 인터페이스, 즉 어댑터(153)를 통해 LAN(151)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(120)는 인터넷 등의 WAN(152)을 통해 통신을 구축하기 위한 모뎀(154), 무선 링크, 또는 기타 수단을 포함할 수 있다. 내장형 또는 외장형일 수 있는 모뎀(154)은 직렬 포트 인터페이스(146)를 통해 시스템 버스(123)에 접속된다. 네트워크 환경에서, 컴퓨터(120)에 관해 도시된 프로그램 모듈 또는 그 일부분은 원격 메모리 저장 장치에 저장될 수 있다. 도시된 네트워크 접속은 예시적인 것이며, WAN(152) 상에 통신을 구축하는 그 외의 수단이 사용될 수 있다는 것을 알 수 있다.
도 1은 본 발명의 적절한 동작 환경을 도시하고 있지만, 본 발명의 원리는 네트워크 사이트들을 브라우징(browsing)할 수 있는 임의의 컴퓨팅 시스템에 이용될 수 있다. 도 1에 도시되는 컴퓨팅 시스템은 단지 예이며, 본 발명이 원리가 구현될 수 있는 매우 다양한 환경의 작은 일부까지는 나타낼 수는 없다. 이하의 설명 및 특허 청구 범위에서, "컴퓨팅 시스템"은 하나 이상의 기능을 수행하는 소프트웨어를 이용할 수 있는 임의의 하드웨어 컴포넌트 또는 컴포넌트들로서 넓게 정의된다. 컴퓨터 시스템의 예는 데스크탑 컴퓨터, 랩탑 컴퓨터, PDA, 전화, 또는 프로세싱 능력을 구비하는 임의의 다른 시스템 또는 장치를 포함한다.
도 2는 본 발명의 원리를 설명하는 것을 돕는 계층(hierarchy; 200)을 도시하며 이는 임의의 한 특정 컴퓨팅 시스템 상에 있을 필요는 없다. 계층(200)은 수평측의 타원들(201I)이 나타내듯이 잠재적으로 더 많을 수 있는 애플리케이션 중에서 애플리케이션(201A 내지 201H)을 포함하는 복수의 애플리케이션(201)을 포함한다. 이들 애플리케이션은 일반적으로 소프트웨어 애플리케이션을 나타낸다. 소프트웨어 애플리케이션은 통상적으로 작성자가 소스 코드를 초벌 작성함으로써 생성된다. 그 다음, 컴파일러(compiler)(또는 인터프리터(interpreter))는 소스 코드를 프로세서에 의해 판독되고 수행될 수 있는 컴퓨터 실행가능 명령어로 컴파일(compile)(또는 인터프리팅(interprete))한다.
객체지향 프로그래밍의 이점 중 하나는 애플리케이션에 결합될 컴포넌트를 독립적으로 작성할 수 있다는 점이다. 컴포넌트는, 실행될 때 하나 이상의 기능을 구현하는 컴퓨터 실행가능 명령어의 분리된 집합이다. 컴포넌트는 다른 소프트웨어 컴포넌트나 애플리케이션에 의해 호출될 수 있다. 독립적으로 작성된 컴포넌트가 단순한 함수 호출에 의해 애플리케이션에 결합될 수 있기 때문에, 컴포넌트는 애플리케이션이 그 컴포넌트에 의해 제공되는 기능을 구비해야 할 때마다 다시 작성할 필요가 없다. 따라서, 객체지향 프로그래밍은 애플리케이션 작성자가 다른 이들의 작업과 결합될 수 있게 하고, 이로 인하여 애플리케이션 작성자가 다른 이들에 의하여 이미 해결된 세부적인 연산들로 어려움을 겪지 않고, 애플리케이션의 더욱 발전된 특징들에 더욱 주의를 기울일 수 있게 한다. 컴포넌트를 다시 설계하 고 다시 작성하는 대신, 애플리케이션 작성자는 애플리케이션이 컴포넌트로의 적절하게 구조화된 함수 호출을 배치하고, 애플리케이션이 컴포넌트로부터 수신된 함수 호출을 적절하게 해석하기에 충분한 코드 초안을 작성하기만 하면 된다. 컴포넌트 설계자들은 통상적으로 함수 호출의 배치 및 수신에 대한 자신들의 세부사항을 문서화하여 애플리케이션 설계자들이 이를 행할 수 있게 한다.
도 2로 다시 돌아가면, 계층은 수평측의 타원(202G)들이 나타내듯이 잠재적으로 더 많을 수 있는 컴포넌트들 중에서 컴포넌트(202A 내지 202F)를 포함하는 복수의 컴포넌트(202)를 포함한다. 이들 컴포넌트(202)는 반복되는 함수 호출 및 리턴 메카니즘을 수반하는 컴포넌트 생성 메카니즘을 통하여 애플리케이션에 결합할 수 있도록 작성될 수 있는 컴포넌트를 나타낸다.
애플리케이션(201)은 몇몇의 이용가능한 애플리케이션 프레임워크(204) 중 하나를 이용하여 작성될 수 있다. 애플리케이션 프레임워크는 수평측의 타원(204E)들이 나타내듯이 잠재적으로 더 많을 수 있는 애플리케이션 프레임워크들 중 애플리케이션 프레임워크(204A 내지 204D)를 포함한다. 애플리케이션 프레임워크는 적절한 기능적 소프트웨어 애플리케이션의 작성을 용이하게 하는 툴(tool)의 집합 및 환경을 포함한다. 애플리케이션 프레임워크의 예는 윈도우즈 폼 클라이언트-사이드 사용자 인터페이스 프로그래밍 프레임워크, 에이에스피닷넷 서버-사이드 UI 프로그래밍 및 HTTP 프레임워크, 프리 스레디드 콘솔 애플리케이션, SQL 서버에 임베딩된 애플리케이션들 및 현재 개발되었거나 미래에 개발될 수 있는 다른 것들을 포함한다. 애플리케이션 프레임워크는 본 기술 분야에서 "애플 리케이션 모델"이라고도 종종 칭해진다.
기존에 이용가능한 컴포넌트에 비하여 기존에 이용가능한 애플리케이션 프레임워크는 상대적으로 적고, 기존에 이용가능한 애플리케이션에 비하여 기존에 이용가능한 컴포넌트는 상대적으로 적다. 이러한 현상을 도시하기 위하여, 도 2에서는, 컴포넌트(202)보다 더 많은 애플리케이션(201)이 도시되고, 애플리케이션 프레임워크(204)보다 더 많은 컴포넌트(202)가 도시되지만, 애플리케이션(201), 컴포넌트(202), 및 애플리케이션 프레임워크(204)는 결코 기존의 것이 아니다.
계층(200)은 또한 비동기 오퍼레이션 관리자(203)를 포함한다. 전술했듯이, 비동기 오퍼레이션을 행하게 될 때 다른 애플리케이션 프레임워크는 다른 스레딩 및 컨커런시 모델을 갖는다. 비동기 오퍼레이션은 애플리케이션-레벨의 프로세스는 진행 중인 반면 실행 중의 다른 스레드에서는 혹은 하드웨어의 몇몇의 일부에서는 완료로 접근해가는 연산이다. 몇몇의 애플리케이션 프레임워크는 비동기 오퍼레이션이 어떤 스레드에서 실행될 수 있고 언제 완료되는지에 대한 제약을 갖지 않는다. 다른 것들은 비동기 오퍼레이션이 사용자 인터페이스를 처리하는 데에 사용되는 스레드와 동일한 스레드 등의 특정 스레드에서 실행되기를 요구한다. 다른 것들은 사용자 인터페이스를 처리하는 데에 사용되는 스레드와는 다른 스레드에서 실행되기를 요구할 수 있다. 다른 것들은 비동기 오퍼레이션이 비동기 오퍼레이션을 초기화하는 데에 사용되는 스레드와 동일한 스레드에서 실행되기를 요구한다. 또 다른 것들은 임의의 특정 스레드에서 리턴되는 것에 대하여 어떠한 요구 사항도 갖지 않을 수 있지만, 연산이 "직렬화(serialized)" 즉, 임의의 소정의 시간에 하 나의 연산만이 진행되게 하는 것을 요구할 수 있다;
종래에는, (파일 다운로드 등의) 백그라운드에서 수행되는 것이 더 바람직한 비동기 오퍼레이션을 수행하는 컴포넌트를 작성할 때, 컴포넌트 자신은 컴포넌트가 잠재적으로 결합될 수 있는 애플리케이션을 작성하는 데에 사용되는 애플리케이션 프레임워크의 스레딩 및 컨커런시 모델을 특별히 다루는 코드를 포함하는 것이 필요했다. 따라서, 특히, 컴포넌트가 잠재적으로 복수의 애플리케이션 프레임워크 중 하나를 이용하여 작성되는 애플리케이션에 결합된다면, 이러한 초안의 코드를 작성하는 데에 상당한 노력이 든다. 더 불리하게도, 복수의 컴포넌트가 다른 프레임워크들을 다루도록 작성되었을 수 있다. 게다가, 모든 기존의 애플리케이션 프레임워크마다 대하여 작성된 컴포넌트들이라고 해도 새로 도입된 애플리케이션 프레임워크에서 동작하는 것이 실패하는 것이 통상적이다.
비동기 오퍼레이션 관리자(203)는 표준 인터페이스(203A)를 이용하여 컴포넌트들(202)과 인터페이스하므로, 이 컴포넌트들은 어느 애플리케이션 프레임워크가 사용되고 있는지를 특별히 다룰 필요가 없다. 대신에, 컴포넌트는 표준 인터페이스(203A)를 이용하여 비동기 오퍼레이션 관리자로의 표준 함수 호출을 배치할 뿐이다. 또한, 애플리케이션 프레임워크(204)는 표준 인터페이스(203B)를 이용하여 비동기 오퍼레이션 관리자(203)와 통신할 수 있다.
전술했듯이, 계층(200)은 동일한 컴퓨팅 시스템에서 구현될 필요는 없다. 그러나, 선(211, 212) 및 화살표(221, 222 및 223)가 애플리케이션(201D), 컴포넌트(202C), 비동기 오퍼레이션 관리자(203) 및 애플리케이션 프레임워크(204A) 간의 상호 연결된 관계임을 도시한다. 본 발명의 원리를 도시하기 위하여, 본 명세서의 남은 설명 동안, 애플리케이션(201D), 컴포넌트(202C), 비동기 오퍼레이션 관리자(203) 및 애플리케이션 프레임워크(204A)는 동일한 컴퓨팅 시스템에서 동작한다고 가정하며, 이로써 시스템 메모리에서 예를 들어 설명될 수 있다. 이러한 컴퓨팅 시스템의 예를 도 1의 컴퓨터(120)로서 도시하였지만 임의의 컴퓨팅 시스템이어도 좋다.
상호 연결선(212)에 의해 도시되듯이 애플리케이션(201D)은 애플리케이션 프레임워크(204A)를 이용하여 작성된다. 상호 연결선(211)에 의해 도시되듯이 컴포넌트(202C)는 애플리케이션(201D)에 결합된다. 컴포넌트(202C)가 생성된 후, 컴포넌트(202C)는 비동기 오퍼레이션을 초기화하기 위해 표준 인터페이스(203A)를 통하여 비동기 오퍼레이션 관리자(203)로의 표준 함수 호출(222)을 배치한다. 애플리케이션 프레임워크(204A) 또는 다른 모듈은 비동기 오퍼레이션을 요청하는 컴포넌트(202C)가 결합되는 애플리케이션(201D)을 작성하는 데에 이용되는 애플리케이션 프레임워크의 식별정보를 (화살표(221)에 의해 도시되듯이) 비동기 컴포넌트에게 통지할 수 있다. 비동기 오퍼레이션이 완료됐을 때, 화살표(223)에 의해 도시되듯이 비동기 오퍼레이션 관리자(203)는 비동기 오퍼레이션 완료를 컴포넌트(202C)에게 통지한다.
도 3은 컴포넌트들 중 적어도 하나가 결합되는 애플리케이션을 작성하는 데에 사용되는 애플리케이션 프레임워크와 독립적인 방식으로 상기 컴포넌트가 비동기 오퍼레이션을 수행하는 방법(300)을 도시한다. 도 2와 관련하여, 비동기 오퍼 레이션을 수행하는 컴포넌트는 컴포넌트(202C)인 한편, 컴포넌트를 결합하는 애플리케이션은 애플리케이션(201D)이다.
본 방법(300)은 비동기 오퍼레이션 관리자(203)에 의해 구현된다. 비동기 오퍼레이션 관리자는 컴포넌트(202C)로부터 표준 함수 호출(222)을 수신한 다음(행위 301), 표준 함수 호출이 애플리케이션 프레임워크와는 독립적인 방식으로 발행되었다 하더라도 표준 함수 호출에 응답하여 애플리케이션 프레임워크에 적절한 방식으로 비동기 오퍼레이션을 수행하는 기능적, 결과 지향적인 단계를 수행한다. 상기 단계는 이러한 결과를 달성하기 위한 임의의 대응하는 행위를 포함할 수 있다. 그러나, 도시된 실시예에서, 단계 310은 대응하는 비-기능적인 행위(311, 312, 313 및 314)를 포함한다.
특히, 비동기 오퍼레이션 관리자(203)는 컴포넌트(202C)가 결합되는 애플리케이션(201D)을 작성하는 데에 사용되는 애플리케이션 프레임워크(204A)를 감지한다(행위 311). 이는 애플리케이션 프레임워크(204A)를 식별하는 통지(221)를 수신함으로써 달성될 수 있다. 이러한 행위는 비동기 오퍼레이션의 실행 이전 또는 실행 중 임의의 시점에 일어날 수 있다.
비동기 오퍼레이션 관리자(203)는 또한 비동기 오퍼레이션이 함수 호출에 응답하여 수행되어야 하는지를 결정한다(행위 312). 그 다음, 비동기 오퍼레이션 관리자(203)는 컴포넌트(202C)가 결합되는 애플리케이션을 작성하는 데에 사용되는 애플리케이션 프레임워크(201D)에 따라서 비동기 오퍼레이션을 수행한다(행위 313). 그러면, 비동기 컴포넌트는 비동기 오퍼레이션이 완료됐을 때 스레딩 및 컨 커런시 모델에 따르는 방식으로 컴포넌트(202C)에 통지(223)를 발행한다(행위 314). 다시 말하면, 비동기 오퍼레이션은 감지된 애플리케이션 프레임워크에 적절한 스레드에서 리턴한다. 스레딩 및 컨커런시 모델에 의존하면, 이는 제약 사항 없이 임의의 스레드에서의 리턴, 사용자 인터페이스를 처리하는 데에 이용되는 것과 동일하거나 다른 스레드에서 리턴, 비동기 오퍼레이션을 초기화하는 데에 이용하는 것과 동일한 스레드에서의 리턴 등을 포함한다.
본 발명의 원리를 설명하였으므로, 이제부터는 비동기 오퍼레이션 관리자(203)와 인터페이스할 수 있는 컴포넌트의 예를 코드 예제에 관련하여 설명한다. 예제 컴포넌트는 비동기 오퍼레이션 관리자(203)가 다룰 수 있는 임의의 애플리케이션 프레임워크에 대해 사용가능한 몇몇의 메소드를 포함한다. 비동기 오퍼레이션 관리자의 코드 예제도 이하에 제공될 것이다.
컴포넌트 코드 예제는 이하 "WholesaleGeoduckPricer"라 칭하고, 컴포넌트가 코드 예제에서 "AsyncOperationManager"라고 칭하는 비동기 오퍼레이션 관리자(203)를 이용하는 것을 설명한다. 볼드체의 요소들은 특히 AsyncOperationManager에 관련된다. 본 명세서에서 구현된 CalculatePriceAsync()의 버전은 "스테이트(state)"라 칭하는 스테이트 객체를 취함을 첫번째로 유의한다. 또한, WholesaleGeoduckPricer는 복수의 동시 연산이 계류될 수 있게 한다. AsyncOperationManager 및 관련 클래스들은 컴포넌트 작성자의 관점에서 직접 이들 복수의 동시 연산의 구현을 관리한다.
컴포넌트 코드 예제는 명확함을 위해 행 번호가 부여되어 다음에 제시된다.
Figure 112004025319435-pat00001
Figure 112004025319435-pat00002
이 컴포넌트는 임의의 애플리케이션 프레임워크에서 동작한다. AsyncOperationManager 및 AsyncOperation은 아래에 애플리케이션 프레임워크가 있고 위쪽에 컴포넌트가 있는 추상 포인트(abstract point)를 나타내며, 이 기초적 하부 구조는 애플리케이션 프레임워크에 적절한 객체가 정확한 시점에 설치된다는 것을 보장한다.
행 2 내지 34는 마이크로소프트닷넷 언어인 C#으로 쓰여진 WholesaleGeoduckPricer 컴포넌트를 정의한다. 이 코드 및 모든 다른 코드 예제는 C#으로 쓰여졌다. 행 2는 컴포넌트의 제목 행이고 컴포넌트를 퍼블릭 클래스로서 정의한다. 행 4 내지 7은 퍼블릭 WholesaleGeoduckPricer 컨스트럭터를 정의한다. 행 6은 완료시에 비동기 오퍼레이션을 리턴하는 데에 이용되는 대리자(delegate)를 작성한다.
행 8 내지 12는 소정의 대합(Geoduck)의 킬로그램 수치에 대해 원하는 가격이 계산되는 퍼블릭 메소드 CalculatePriceAsync를 정의한다. 또한, 사용자 스테이트가 이 메소드로 넘어간다. 이 사용자 스테이트는 CalculatePriceAsync의 복수의 독립된 호출을 구별하는 데에 이용된다. 행 10은, AsyncOperationManager.CreateOperation 메소드를 호출하여, 생성할 비동기 오퍼레이션의 "수명(lifetime)"을 나타내는 AsyncOperation을 생성함으로써, 비동기 오퍼레이션을 생성하지만, 아직 시작하지는 않는다. 사용자 스테이트는 CreateOperation으로 넘어간다. 이 "수명" AsyncOperation은 비동기적으로 실행되는 기초적인 메카니즘까지 영향을 미치도록 넘겨진다. 또한, 이 메카니즘은 AsynchOperation이 완료됐을 때 MyCompletionMethod() 메소드가 호출되도록 대리자를 수신한다. 최종적으로, 성공, 실패, 또는 취소를 이유로, MyCompletionMethod()는 임의의 스레드에서 호출되고, 수명은 그 스레드로 넘겨진다.
이 MyCompletionMethod는 CalculatePriceCompletedEventArgs을 작성하고, 그 다음 현재 애플리케이션 모델의 정확한 스레드/컨택스트에서 동작하는 메소드의 대리자에 넘겨주는, AsyncOperation의 OperationCompleted를 호출한다. 이러한 메소드는 CalculateCompleted()이다.
AsyncOperation.OperationCompleted() 함수는 2가지 일을 한다: 특정 콜백(callback) 함수(대리자)가 적절한 스레딩 또는 컨커런시 컨텍스트에서 호출되는 것을 보장하고, 비동기 오퍼레이션의 수명을 효과적으로 "종료"한다. OperationCompleted 호출 후에 AsyncOperation 사용의 시도는 예외를 일으킬 것이다. 상술한 바로부터 CalculateCompleted()를 완료하면, 올바른 스레드/컨텍스트 상에 있게 되고, 그로부터 소정의 이벤트가 발생될 수 있다.
AsyncOperation이 컴포넌트의 단일한 인스턴스 데이터로서 저장되기보다는, 호출들과 함께 전달되기 때문에, 미처리된 복수의 비동기 오퍼레이션들이 여기서 지원될 수 있음을 유의한다. 정보를 넘겨주는 것에 대한 대안은 이 컴포넌트에서 수명의 집합체를 유지하며, OperationCompleted()를 호출하기 위한 수명을 검색하고, 그 직후에 집합체로부터 상기 수명들을 제거하는 것일 수 있다.
이는, 컴포넌트가 스태틱 메소드 AsyncOperationManager.CreateOperation()을 요청하여 그것의 새로운 AsyncOperation을 생성하고, 통신에 필요한 메소드는 그 오브젝트에 넣는 설계를 도출한다. 한편, CreateOperation()은 상기 스레드의 현재 애플리케이션 모델의 새로운 "수명"을 생성한는 것이 역할인 등록 팩토리(registered factory)를 통하여 호출함으로써 자신의 오브젝트를 생성한다.
명확함을 위해 행 번호가 부여된 이하의 예제는 비동기 오퍼레이션 관리자(203)의 퍼블릭하게 이용가능한 인터페이스(메소드 및 속성)를 설명한다:
1. namespace System.ComponentModel
2. {
3. public class AsyncOperationManager
4. {
5. static AsyncOperation CreateOperation(object userSuppliedToken);
6. static AsyncOperationFactory CurrentFactory
7. {
8. get;
9. set;
10. }
11. static AsyncOperationFactory FreeThreadedFactory
12. {
13. get;
14. }
15. }
16. }
메소드 CreateOperation은 다음과 같이 정의된다.
static AsyncOperation CreateOperation(object userSuppliedToken);
메소드 CurrentFactory는 다음과 같이 정의된다.
1. static AsyncOperationFactory CurrentFactory
2. {
3. get;
4. set;
5. }
get 메소드 및 set 메소드는 스레드의 현재 AsyncOperationFactory에 영향을 미친다. 이 팩토리는 실제 AsyncOperation을 생성하는 데에 이용된다. 애플리케이션 프레임워크 제공자만이 이들 메소드를 호출한다.
다음은, 항상 개별적인 스레드에서 실행되는 AsyncOperation을 생성하는 팩토리인 FreeTreadedFactory 메소드를 정의한다:
Figure 112004025319435-pat00003
이 메소드는 프리-스레디드 비동기 오퍼레이션 수명을 생성하기 위한 팩토리를 액세스한다.
다음은 위의 코드 예제를 참조하여 이루어진 AsyncOperation의 클래스 정의이다(명확함을 위하여 행 번호가 부여되었음).
Figure 112004025319435-pat00004
Figure 112004025319435-pat00005
이하의 브이비닷넷(VB.NET) 코드는 이러한 패턴의 "이용"을 설명한다. 제1행은 새로운 WholesaleGeoduckPricer 컴포넌트를 생성한다. 제2행은, 비동기적으로 진행되기 때문에 CalculatePriceAsync라고 호칭된 CalculatePrice 연산을 시작한다. 최종적으로, 끝 부분의 함수는, 가격 연산의 완료 시에, 함수 결과를 이용하여 이 함수를 호출하는 "완료 핸들러"이다. 이 완료 함수는 비동기적으로 호출되어지고, 애플리케이션이 실행되기 위한 올바른 스레드/컨텍스트에서 호출됨을 유의한다(명확함을 위하여 행 번호가 부여되었음).
Figure 112004025319435-pat00006
따라서, 프로그래밍 모델은 컴포넌트가 결합되는 애플리케이션을 작성하는 데에 이용되는 기본적인 애플리케이션 프레임워크에 독립적인 방식으로 작성될 수 있는 컴포넌트들로 기술되었다. 따라서, 본 발명의 원리는 컴포넌트 작성자가 잠재적인 기초 애플리케이션 프레임워크 스레딩 및 컨커런시 모델을 컴포넌트 자체에서 특별히 다룰 필요가 없기 때문에 비동기 오퍼레이션을 구현하는 컴포넌트를 작성할 때 소프트웨어 개발의 보다 효과적인 발전을 가능하게 한다.
본 발명은 본 발명의 사상이나 본질적인 특징들에서 벗어나지 않는 한 다른 특정한 형태로 구현될 수 있다. 설명된 실시예들은 모든 관점에서 단지 예시적인 것일 뿐, 제한하도록 의도된 것이 아니다. 그러므로, 본 발명의 범위는 상술한 설명에 의해서가 아니라 특허 청구 범위에 의해 규정된다. 특허 청구 범위의 동등물의 의미 및 범위 내에 있는 모든 변경은 특허 청구 범위의 범위 안에 있다고 받아들여야 한다.

Claims (32)

  1. 하나 이상의 프로세서를 포함하는 컴퓨팅 시스템에 사용되는 컴퓨터 판독가능 기록매체 있어서, 상기 컴퓨터 판독가능 기록매체는 컴퓨터 실행가능 명령어를 포함하고,
    상기 컴퓨터 실행가능 명령어는 상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨팅 시스템에게,
    특정 애플리케이션 프레임워크에 따라 작성된 애플리케이션,
    함수 호출에 의해 상기 애플리케이션에 결합될 수 있고, 비동기 오퍼레이션(asynchronous operation)을 초기화하도록 표준 함수 호출을 배치하는 것이 가능하며, 비동기 오퍼레이션을 생성하도록 비동기 오퍼레이션 관리자의 메소드를 호출하는 것이 가능한 적어도 하나의 컴포넌트 - 비동기 오퍼레이션이 수행되고자 할 때, 상기 컴포넌트는 상기 애플리케이션을 작성하는 데에 이용되는 상기 특정 애플리케이션 프레임워크와는 독립적으로 표준 함수 호출을 발행하도록 구성됨 - ;
    상기 비동기 오퍼레이션 관리자에게 상기 특정 애플리케이션 프레임워크가 상기 애플리케이션을 작성하는 데에 이용되는 애플리케이션 프레임워크임을 통지하도록 구성된 애플리케이션 프레임워크 모듈 - 상기 애플리케이션에는 상기 컴포넌트가 결합됨 - ; 및
    비동기 오퍼레이션 관리자를 인스턴스화 하게 하고 - 상기 비동기 오퍼레이션 관리자는 비동기 오퍼레이션을 생성하도록 호출되는 퍼블릭 메소드를 포함하는 표준 인터페이스를 포함하고, 상기 비동기 오퍼레이션은 상기 비동기 오퍼레이션이 완료되면 호출될 퍼블릭 메소드를 포함함 - ,
    상기 비동기 오퍼레이션 관리자는 상기 애플리케이션을 작성하는 데에 이용되는 상기 특정 애플리케이션 프레임워크를 감지하고, 상기 표준 함수 호출을 수신하고, 상기 비동기 오퍼레이션을 수행하고, 상기 비동기 오퍼레이션이 완료되면, 상기 애플리케이션 프레임워크의 스레딩 또는 컨커런시 모델(threading or concurrency model)을 따르는 방식으로 상기 컴포넌트에 통지가 발행되게 하도록 구성되고, 상기 비동기 오퍼레이션 관리자는 상기 특정 애플리케이션 프레임워크에 적절한 스레드 또는 컨커런시 컨텍스트에서 상기 통지를 발행하도록 더 구성되는, 컴퓨터 판독가능 기록매체.
  2. 컴퓨팅 시스템에 있어서,
    하나 이상의 프로세서 및 시스템 메모리를 포함하며,
    제1항의 컴퓨터 판독가능 기록매체에 저장된 명령어가 인스턴스화되고 실행되는 컴퓨팅 시스템.
  3. 애플리케이션 프레임워크를 이용하여 작성된 애플리케이션을 실행시킬 수 있는 컴퓨팅 시스템에서 - 상기 애플리케이션은 하나 이상의 컴포넌트를 결합하고, 상기 컴포넌트는 비동기 오퍼레이션을 초기화하도록 함수 호출을 발행하는 것이 가능함 - ,
    상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크와는 독립적인 방식으로 비동기 오퍼레이션을 수행하는 방법에 있어서,
    컴포넌트로부터 표준 함수 호출을 수신하는 단계 - 상기 컴포넌트는 비동기 오퍼레이션을 생성하도록 비동기 오퍼레이션 관리자의 메소드를 호출할 수 있고, 상기 표준 함수 호출은 상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크와는 독립적인 방식으로 발행됨 - ;
    상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크를 비동기 오퍼레이션 관리자가 감지하는 단계 - 상기 비동기 오퍼레이션 관리자는 비동기 오퍼레이션을 생성하도록 호출되는 퍼블릭 메소드를 포함하고, 상기 감지하는 단계는 상기 애플리케이션 프레임워크에 특정한 애플리케이션 프레임워크 모듈로부터 상기 애플리케이션 프레임워크를 식별하는 통지를 수신하는 단계를 포함함 - ;
    상기 함수 호출에 응답하여 비동기 오퍼레이션이 수행될지를 결정하는 단계;
    상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크의 스레딩 또는 컨커런시 모델에 따라 상기 비동기 오퍼레이션을 수행하는 단계; 및
    상기 비동기 오퍼레이션이 완료되면, 상기 스레딩 또는 컨커런시 모델에 따르는 방식으로 그리고 상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행함으로써, 비동기 오퍼레이션 관리자가 상기 컴포넌트에 통지를 발행하는 단계
    를 포함하는 방법.
  4. 제3항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 행위는
    임의의 스레드에서 상기 통지를 발행하는 행위
    를 포함하는 방법.
  5. 제3항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 행위는
    사용자 인터페이스를 처리하는 데에 사용되고 있는 스레드에서 상기 통지를 발행하는 행위
    를 포함하는 방법.
  6. 제3항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 행위는
    사용자 인터페이스를 처리하는 데에 사용되지 않고 있는 스레드에서 상기 통지를 발행하는 행위
    를 포함하는 방법.
  7. 제3항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 행위는
    상기 표준 함수 호출을 발행하는 데에 이용되는 상기 스레드와 동일한 스레드에서 상기 통지를 발행하는 행위
    를 포함하는 방법.
  8. 제3항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 행위는
    상기 애플리케이션으로부터 코드를 실행시키는 활성화된 스레드가 동시에 두개일 수 없도록 직렬화(serialized)된 연산이 제공되는 임의의 스레드에서 상기 통지를 발행하는 행위
    를 포함하는 방법.
  9. 제3항에 있어서,
    비동기 오퍼레이션이 수행될지를 결정하는 상기 단계는
    하나 이상의 함수 호출에 응답하여 복수의 비동기 오퍼레이션이 수행될 것을 감지하는 단계를 포함하고,
    상기 방법은
    상기 복수의 비동기 오퍼레이션 모두가 완료된 후에도 애플리케이션 실행이 계속되도록 상기 복수의 비동기 오퍼레이션을 처리하는 단계
    를 더 포함하는 방법.
  10. 제3항에 있어서,
    상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크의 스레딩 및 컨커런시 모델에 따라 상기 비동기 오퍼레이션을 수행하는 단계는
    상기 컴퓨팅 시스템의 작업을 줄이는 하나 이상의 스레드를 실행시키는 단계; 및
    상기 컴퓨팅 시스템의 작업을 줄이는 하나 이상의 스레드를 실행시킨 이후에, 상기 컴퓨팅 시스템의 작업을 증가시키는 하나 이상의 스레드를 실행시키는 단계
    를 포함하는 방법.
  11. 애플리케이션 프레임워크를 이용하여 작성되는 애플리케이션을 실행할 수 있는 컴퓨팅 시스템에 사용되는 컴퓨터 판독가능 기록매체에 있어서,
    상기 애플리케이션은 하나 이상의 컴포넌트를 결합하고,
    상기 컴퓨터 판독가능 기록매체는, 상기 컴포넌트들 중 적어도 하나의 컴포넌트가, 상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크와는 독립적인 방식으로 비동기 오퍼레이션을 수행하는 방법을 구현하고,
    상기 컴퓨터 판독가능 기록매체는 컴퓨터 실행가능 명령어를 포함하고,
    상기 컴퓨터 실행가능 명령어는 상기 컴퓨팅 시스템의 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨팅 시스템에게 제3항에 기재된 방법을 수행하게 하는, 컴퓨터 판독가능 기록매체.
  12. 제11항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 상기 컴퓨터 실행가능 명령어는
    상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨팅 시스템에게
    임의의 스레드에서 상기 통지를 발행하는 행위
    를 수행하게 하는 컴퓨터 실행가능 명령어를 포함하는, 컴퓨터 판독가능 기록매체.
  13. 제11항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 컴퓨터 실행가능 명령어는
    상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨팅 시스템에게
    사용자 인터페이스를 처리하는 데에 사용되고 있는 스레드에서 상기 통지를 발행하는 행위
    를 수행하게 하는 컴퓨터 실행가능 명령어를 포함하는, 컴퓨터 판독가능 기록매체.
  14. 제11항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 상기 컴퓨터 실행가능 명령어는
    상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨팅 시스템에게
    사용자 인터페이스를 처리하는 데에 사용되지 않고 있는 스레드에서 상기 통지를 발행하는 행위
    를 수행하게 하는 컴퓨터 실행가능 명령어를 포함하는, 컴퓨터 판독가능 기록매체.
  15. 제11항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 상기 컴퓨터 실행가능 명령어는
    상기 하나 이상의 프로세서에 의해 실행될 때, 상기 컴퓨팅 시스템에게
    상기 표준 함수 호출을 발행하는 데에 이용되는 상기 스레드와 동일한 스레드에서 상기 통지를 발행하는 행위
    를 수행하게 하는 컴퓨터 실행가능 명령어를 포함하는, 컴퓨터 판독가능 기록매체.
  16. 애플리케이션 프레임워크를 이용하여 작성되는 애플리케이션 - 상기 애플리케이션은 하나 이상의 컴포넌트를 결합함 - 을 실행시킬 수 있는 컴퓨팅 시스템에서,
    컴포넌트가 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크와는 독립적인 방식으로 비동기 오퍼레이션을 수행하도록 하기 위한 방법에 있어서,
    상기 컴포넌트로부터 표준 함수 호출을 수신하는 단계 - 상기 표준 함수 호출은 상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크와는 독립적인 방식으로 발행됨 -;
    상기 표준 함수 호출에 응답하여 비동기 오퍼레이션을 생성하도록 퍼블릭 메소드에 대한 호출을 비동기 오퍼레이션 관리자가 수신하는 단계 - 상기 비동기 오퍼레이션은 상기 비동기 오퍼레이션이 완료되면 호출될 퍼블릭 메소드를 포함함 - ; 및
    상기 표준 함수 호출이 상기 애플리케이션 프레임워크와는 독립적인 방식으로 발행되었다 하더라도, 상기 표준 함수 호출에 응답하여 상기 애플리케이션 프레임워크에 적절한 방식으로 비동기 오퍼레이션을 수행하는 단계를 포함하고,
    상기 비동기 오퍼레이션을 수행하는 상기 단계는,
    상기 애플리케이션 프레임워크에 특정한 애플리케이션 프레임워크 모듈로부터 적어도 상기 애플리케이션 프레임워크를 식별하는 통지를 수신함으로써 상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크를 감지하는 단계;
    상기 함수 호출에 응답하여 비동기 오퍼레이션이 수행될지를 결정하는 단계;
    상기 컴포넌트가 결합되는 상기 애플리케이션을 작성하는 데에 이용되는 상기 애플리케이션 프레임워크의 스레딩 또는 컨커런시 모델에 따라 상기 비동기 오퍼레이션을 수행하는 단계; 및
    상기 비동기 오퍼레이션이 완료될 때, 상기 스레딩 또는 컨커런시 모델에 따르는 방식으로 그리고 상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행함으로써, 상기 컴포넌트에 통지를 발행하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 단계는
    임의의 스레드에서 상기 통지를 발행하는 단계
    를 포함하는 방법.
  18. 제16항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 단계는
    사용자 인터페이스를 처리하는 데에 사용되고 있는 스레드에서 상기 통지를 발행하는 단계
    를 포함하는 방법.
  19. 제16항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 단계는
    사용자 인터페이스를 처리하는 데에 사용되지 않고 있는 스레드에서 상기 통지를 발행하는 단계
    를 포함하는 방법.
  20. 제16항에 있어서,
    상기 감지된 애플리케이션 프레임워크에 적절한 스레드에서 상기 통지를 발행하는 단계는
    상기 표준 함수 호출을 발행하는 데에 이용되는 상기 스레드와 동일한 스레드에서 상기 통지를 발행하는 단계
    를 포함하는 방법.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
KR1020040043063A 2003-06-13 2004-06-11 애플리케이션 프레임워크를 비정형화한 비동기 컴포넌트를위한 메카니즘 KR100895929B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/461,195 2003-06-13
US10/461,195 US7343606B2 (en) 2003-06-13 2003-06-13 Mechanism for asynchronous components to be application framework agnostic

Publications (2)

Publication Number Publication Date
KR20040107414A KR20040107414A (ko) 2004-12-20
KR100895929B1 true KR100895929B1 (ko) 2009-05-07

Family

ID=33418104

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040043063A KR100895929B1 (ko) 2003-06-13 2004-06-11 애플리케이션 프레임워크를 비정형화한 비동기 컴포넌트를위한 메카니즘

Country Status (5)

Country Link
US (1) US7343606B2 (ko)
EP (1) EP1489504B1 (ko)
JP (1) JP4627636B2 (ko)
KR (1) KR100895929B1 (ko)
CN (1) CN100405300C (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007114902A (ja) * 2005-10-18 2007-05-10 Just Syst Corp 情報処理装置、情報処理方法および情報処理プログラム
WO2009048285A2 (en) * 2007-10-11 2009-04-16 Electronics And Telecommunications Research Institute Apparatus and method of driving loadable device component
KR100957453B1 (ko) * 2007-10-11 2010-05-11 한국전자통신연구원 로더블 디바이스 컴포넌트 구동 방법 및 장치
CN101159747B (zh) * 2007-11-12 2010-09-01 中兴通讯股份有限公司 一种基于tcp并发多链路的通信系统及其方法
JP4875043B2 (ja) * 2008-10-31 2012-02-15 株式会社東芝 フレームワークプログラム及びクライアント装置
US9544353B2 (en) * 2011-06-16 2017-01-10 Microsoft Technology Licensing, Llc Dynamic activation of web applications
JP5702265B2 (ja) * 2011-11-11 2015-04-15 株式会社日立製作所 プログラム自動生成装置およびプログラム自動生成方法
US20130339485A1 (en) * 2012-06-13 2013-12-19 Motorola Mobility, Inc. Multi-Threaded Asynchronous Download of a Set of Script files Used in a Web Application
CN107179916B (zh) * 2016-03-09 2019-04-23 腾讯科技(深圳)有限公司 一种应用程序开发方法、装置、设备以及开发架构系统
CN107015873A (zh) * 2017-01-23 2017-08-04 阿里巴巴集团控股有限公司 App的功能模块的调用方法、组件接口装置、电子设备及App
CN107562540B (zh) * 2017-09-05 2021-03-12 武汉斗鱼网络科技有限公司 向ui线程投递回调函数的方法、装置及客户端
CN108008995A (zh) * 2017-12-04 2018-05-08 山东浪潮通软信息科技有限公司 一种基于调用类型的等待组件实现方法及装置
CN112631571A (zh) * 2020-11-25 2021-04-09 浙江蓝卓工业互联网信息技术有限公司 一种web编辑器内组件的联动方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996008765A1 (en) 1994-09-15 1996-03-21 Visual Edge Software Limited System and method for providing interoperability among heterogeneous object systems
EP1241593A2 (en) 2001-03-16 2002-09-18 Microsoft Corporation Method and system for interacting with devices having different capabilities

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275871B1 (en) * 1996-07-03 2001-08-14 Siemens Aktiengesellschaft Asynchronous transport optimizing observer-pattern-like system supporting several modes for an interface definition language-less communication subsystem
US6061721A (en) * 1997-10-06 2000-05-09 Sun Microsystems, Inc. Bean-based management system
JPH11212780A (ja) * 1998-01-26 1999-08-06 Mitsubishi Electric Corp 監視制御システム用アプリケーション群開発方法とアプリケーションテンプレート開発支援装置
US6088511A (en) * 1998-05-13 2000-07-11 Microsoft Corporation Nested parallel 2D Delaunay triangulation method
JP2000222197A (ja) * 1999-01-28 2000-08-11 Nec Corp 二つのテンプレートを利用した効率的なシステム開発方法
WO2000055725A1 (fr) * 1999-03-17 2000-09-21 Fujitsu Limited Systeme serveur et support d'enregistrement
US6970903B1 (en) * 1999-10-29 2005-11-29 Intel Corporation Distributed component system management using machine-independent activation requests
WO2001073547A2 (en) * 2000-03-29 2001-10-04 Nextset Software Inc. Messaging engine to achieve container managed asynchronous functionality
WO2002023332A2 (en) * 2000-09-15 2002-03-21 Learnframe, Inc. Extensible software development using asynchronous messaging
US7086006B2 (en) * 2001-11-09 2006-08-01 Corel Corporation Component user interface management

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996008765A1 (en) 1994-09-15 1996-03-21 Visual Edge Software Limited System and method for providing interoperability among heterogeneous object systems
EP1241593A2 (en) 2001-03-16 2002-09-18 Microsoft Corporation Method and system for interacting with devices having different capabilities

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
GAMMA, E. et al. "Design Patterns, Elements of Reusable Object-Oriented Software" 1995, Addison-Wesley. pages 1-31.
STIEFE, M. al. "Application Development using C# and .NET", 2001.12.21 Prentice Hall, page 11 -page 15, page 170-page 190, page 305-page 310

Also Published As

Publication number Publication date
JP4627636B2 (ja) 2011-02-09
EP1489504B1 (en) 2017-07-19
KR20040107414A (ko) 2004-12-20
EP1489504A2 (en) 2004-12-22
JP2005004771A (ja) 2005-01-06
US20040255300A1 (en) 2004-12-16
US7343606B2 (en) 2008-03-11
CN100405300C (zh) 2008-07-23
EP1489504A3 (en) 2007-10-24
CN1573700A (zh) 2005-02-02

Similar Documents

Publication Publication Date Title
Schmidt et al. Pattern-oriented software architecture, patterns for concurrent and networked objects
US8788569B2 (en) Server computer system running versions of an application simultaneously
US8984534B2 (en) Interfacing between a receiving component of a server application and a remote application
US20020078255A1 (en) Pluggable instantiable distributed objects
US8095823B2 (en) Server computer component
US7039923B2 (en) Class dependency graph-based class loading and reloading
US7607128B2 (en) Method and system for enabling a server application to be executed in the same virtual machine as a client application using direct object oriented programming method calls
JP2915842B2 (ja) 第1クラス分散オブジェクトを使用して分散オブジェクト・サーバを制御、管理するシステム、及び方法
US7174361B1 (en) Scripting task-level user-interfaces
US20090172636A1 (en) Interactive development tool and debugger for web services
US20090198802A1 (en) Method and system for interactively configuring a network device
KR100895929B1 (ko) 애플리케이션 프레임워크를 비정형화한 비동기 컴포넌트를위한 메카니즘
US7496654B2 (en) Multi-threaded system for activating a process using a script engine and publishing data descriptive of the status of the process
US8407713B2 (en) Infrastructure of data summarization including light programs and helper steps
US6973657B1 (en) Method for middle-tier optimization in CORBA OTS
US6842905B2 (en) Method and system for implementing collection program interface for accessing a collection of data associated with a legacy enumeration application interface
US9253286B2 (en) Computer program composed from tabular storage structures that includes data and code
CN116893807A (zh) 使用浏览器设计机器人流程自动化机器人的系统和方法
US8286128B2 (en) Methods for type analysis in systems for code generation
US20090089809A1 (en) Automatic generation of parallelizable application units system and method
Evans Why object serialization is inappropriate for providing persistence in java
Fuad An autonomic software architecture for distributed applications
US20040010779A1 (en) Multi-module interpreter
Guide PV-WAVE®
Vilaghy et al. Writing Optimized Java Applications for z/OS

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment
FPAY Annual fee payment
FPAY Annual fee payment

Payment date: 20170330

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180328

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20190328

Year of fee payment: 11