Linux 多线程服务端编程- 使用muduo C++
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Thinking in C++ Volume 2 Annotated Solution Guide, Available for a Small Fee From
1 z 516 Note: This document requires the installation of the fonts Georgia, Verdana and Andale Mono (code font) for proper viewing. These can be found at: http://sourceforge.net/project/showfiles.php?group_id=34153&release_id=105355 Revision 19—(August 23, 2003) Finished Chapter 11, which is now going through review and copyediting. Modified a number of examples throughout the book so that they will compile with Linux g++ (basically fixing case- sensitive naming issues). Revision 18—(August 2, 2003) Chapter 5 is complete. Chapter 11 is updated and is near completion. Updated the front matter and index entries. Home stretch now. Revision 17—(July 8, 2003) Chapters 5 and 11 are 90% done! Revision 16—(June 25, 2003) Chapter 5 text is almost complete, but enough is added to justify a separate posting. The example programs for Chapter 11 are also fairly complete. Added a matrix multiplication example to the valarray material in chapter 7. Chapter 7 has been tech-edited. Many corrections due to comments from users have been integrated into the text (thanks!). Revision 15—(March 1 ,2003) Fixed an omission in C10:CuriousSingleton.cpp. Chapters 9 and 10 have been tech-edited. Revision 14—(January ,2003) Fixed a number of fuzzy explanations in response to reader feedback (thanks!). Chapter 9 has been copy-edited. Revision 13—(December 31, 2002) Updated the exercises for Chapter 7. Finished rewriting Chapter 9. Added a template variation of Singleton to chapter 10. Updated the build directives. Fixed lots of stuff. Chapters 5 and 11 still await rewrite. Revision 12—(December 23, 2002) Added material on Design Patterns as Chapter 10 (Concurrency will move to Chapter 11). -
Phonetic Classification Using Controlled Random Walks
Phonetic Classification Using Controlled Random Walks Katrin Kirchhoff Andrei Alexandrescuy Department of Electrical Engineering Facebook University of Washington, Seattle, WA, USA [email protected] [email protected] Abstract a given node. When building a graph representing a speech Recently, semi-supervised learning algorithms for phonetic database, the neighbourhood sizes and entropies often exhibit classifiers have been proposed that have obtained promising re- large variance, due to the uneven distribution of phonetic classes sults. Often, these algorithms attempt to satisfy learning criteria (e.g. vowels are more frequent than laterals). MAD offers a that are not inherent in the standard generative or discriminative unified framework for accommodating such effects without the training procedures for phonetic classifiers. Graph-based learn- need for downsampling or upsampling the training data. In the ers in particular utilize an objective function that not only max- past, MAD has been applied to class-instance extraction from imizes the classification accuracy on a labeled set but also the text [10] but it has to our knowledge not been applied to speech global smoothness of the predicted label assignment. In this pa- classification tasks before. In this paper we contrast MAD to per we investigate a novel graph-based semi-supervised learn- the most widely used graph-based learning algorithm, viz. label ing framework that implements a controlled random walk where propagation. different possible moves in the random walk are controlled by probabilities that are dependent on the properties of the graph 2. Graph-Based Learning itself. Experimental results on the TIMIT corpus are presented In graph-based learning, the training and test data are jointly that demonstrate the effectiveness of this procedure. -
Iterators Must Go
Iterators Must Go Andrei Alexandrescu c 2009 Andrei Alexandrescu 1/52 This Talk • The STL • Iterators • Range-based design • Conclusions c 2009 Andrei Alexandrescu 2/52 What is the STL? c 2009 Andrei Alexandrescu 3/52 Yeah, what is the STL? • A good library of algorithms and data structures. c 2009 Andrei Alexandrescu 4/52 Yeah, what is the STL? • A ( good|bad) library of algorithms and data structures. c 2009 Andrei Alexandrescu 4/52 Yeah, what is the STL? • A ( good|bad|ugly) library of algorithms and data structures. c 2009 Andrei Alexandrescu 4/52 Yeah, what is the STL? • A ( good|bad|ugly) library of algorithms and data structures. • iterators = gcd(containers, algorithms); c 2009 Andrei Alexandrescu 4/52 Yeah, what is the STL? • A ( good|bad|ugly) library of algorithms and data structures. • iterators = gcd(containers, algorithms); • Scrumptious Template Lore • Snout to Tail Length c 2009 Andrei Alexandrescu 4/52 What the STL is • More than the answer, the question is important in the STL • “What would the most general implementations of fundamental containers and algorithms look like?” • Everything else is aftermath • Most importantly: STL is one answer, not the answer c 2009 Andrei Alexandrescu 5/52 STL is nonintuitive c 2009 Andrei Alexandrescu 6/52 STL is nonintuitive • Same way the theory of relativity is nonintuitive • Same way complex numbers are nonintuitive (see e.g. xkcd.com) c 2009 Andrei Alexandrescu 6/52 Nonintuitive • “I want to design the most general algorithms.” • “Sure. What you obviously need is something called iterators. Five of ’em, to be precise.” c 2009 Andrei Alexandrescu 7/52 Nonintuitive • “I want to design the most general algorithms.” • “Sure. -
Peoplesoft Enterprise HRMS 8.9 Application Fundamentals Reports
PeopleSoft Enterprise HRMS 8.9 Application Fundamentals Reports April 2005 PeopleSoft Enterprise HRMS 8.9 Application Fundamentals Reports SKU HRCS89MP1HAF-R 0405 Copyright © 1988-2005 PeopleSoft, Inc. All rights reserved. All material contained in this documentation is proprietary and confidential to PeopleSoft, Inc. (“PeopleSoft”), protected by copyright laws and subject to the nondisclosure provisions of the applicable PeopleSoft agreement. No part of this documentation may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, including, but not limited to, electronic, graphic, mechanical, photocopying, recording, or otherwise without the prior written permission of PeopleSoft. This documentation is subject to change without notice, and PeopleSoft does not warrant that the material contained in this documentation is free of errors. Any errors found in this document should be reported to PeopleSoft in writing. The copyrighted software that accompanies this document is licensed for use only in strict accordance with the applicable license agreement which should be read carefully as it governs the terms of use of the software and this document, including the disclosure thereof. PeopleSoft, PeopleTools, PS/nVision, PeopleCode, PeopleBooks, PeopleTalk, and Vantive are registered trademarks, and Pure Internet Architecture, Intelligent Context Manager, and The Real-Time Enterprise are trademarks of PeopleSoft, Inc. All other company and product names may be trademarks of their respective owners. The information contained herein is subject to change without notice. Open Source Disclosure PeopleSoft takes no responsibility for its use or distribution of any open source or shareware software or documentation and disclaims any and all liability or damages resulting from use of said software or documentation. -
Reactive Functional and Imperative C++
Reactive FUNCTIONAL AND IMPERATIVE C++ Ericsson, Budapest 2015 Ivan Cukiˇ ´C KDE University OF Belgrade [email protected] [email protected] Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue About ME KDE DEVELOPMENT Talks AND TEACHING Functional PROGRAMMING enthusiast, BUT NOT A PURIST 2 Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Disclaimer Make YOUR CODE readable. Pretend THE NEXT PERSON WHO LOOKS AT YOUR CODE IS A PSYCHOPATH AND THEY KNOW WHERE YOU live. Philip Wadler 3 Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Disclaimer The CODE SNIPPETS ARE OPTIMIZED FOR presentation, IT IS NOT production-ready code. std NAMESPACE IS omitted, VALUE ARGUMENTS USED INSTEAD OF const-refs OR FORWARDING refs, etc. 4 . Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Why C++ 6 FUTURES Concurrency Futures Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Concurrency Threads Multiple PROCESSES Distributed SYSTEMS Note: "concurrency" WILL MEAN THAT DIffERENT TASKS ARE EXECUTED AT OVERLAPPING times. 8 Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Plain THREADS ARE BAD A LARGE FRACTION OF THE flAWS IN SOFTWARE DEVELOPMENT ARE DUE TO PROGRAMMERS NOT FULLY UNDERSTANDING ALL THE POSSIBLE STATES THEIR CODE MAY EXECUTE in. In A MULTITHREADED environment, THE LACK OF UNDERSTANDING AND THE RESULTING PROBLEMS ARE GREATLY AMPLIfiED, ALMOST TO THE POINT OF PANIC IF YOU ARE PAYING attention. John Carmack In-depth: Functional PROGRAMMING IN C++ 9 Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Plain THREADS ARE BAD Threads ARE NOT COMPOSABLE Parallelism CAN’T BE ‘DISABLED’ DiffiCULT TO ENSURE BALANCED LOAD MANUALLY Hartmut Kaiser Plain Threads ARE THE GOTO OF Today’S Computing 10 Futures The FUNCTIONAL SIDE The IMPERATIVE SIDE Further EVOLUTION OF C++ Epilogue Plain SYNCHRONIZATION PRIMITIVES ARE BAD You WILL LIKELY GET IT WRONG S.L.O.W. -
D Programming Language: the Sudden
D Programming Language: The Sudden Andrei Alexandrescu, Ph.D. Research Scientist, Facebook [email protected] YOW 2014 c 2014– Andrei Alexandrescu. 1/44 Introduction c 2014– Andrei Alexandrescu. 2/44 Introduction c 2014– Andrei Alexandrescu. 3/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice • Airburn Infantry c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice • Airburn Infantry Sequel to BoB and Operation Flamethrower c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice • Airburn Infantry Sequel to BoB and Operation Flamethrower • Newburn c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice • Airburn Infantry Sequel to BoB and Operation Flamethrower • Newburn Sequel to Chucky and Spontaneous Combustion c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice • Airburn Infantry Sequel to BoB and Operation Flamethrower • Newburn Sequel to Chucky and Spontaneous Combustion • The Dark Knight Rises c 2014– Andrei Alexandrescu. 4/44 Sudden Sequels • Pronouncing “Melbourne” and “Brisbane” • Burn Identity Sequel to Bourne Identity and Burn Notice • Airburn Infantry Sequel to BoB and Operation Flamethrower • Newburn Sequel to Chucky and Spontaneous Combustion • The Dark Knight Rises Batman vs. -
Nim - the First High Performance Language with Full Support for Hot Code- Reloading at Runtime
Nim - the first high performance language with full support for hot code- reloading at runtime by Viktor Kirilov 1 Me, myself and I my name is Viktor Kirilov - from Bulgaria creator of doctest - the fastest C++ testing framework apparently I like text-heavy slides and reading from them...! deal with it :| 2 Talk agenda some Nim code the performant programming language landscape read: heavily biased C++ rant Nim compilation model hot code reloading usage & implementation ".dll" => assume .so/.dylib (platform-agnostic) demo comments & conclusions a bit on REPLs 3 Hello 1 echo "Hello World" 4 Currencies 1 type 2 # or use {.borrow.} here to inherit everything 3 Dollars* = distinct float 4 5 proc `+` *(a, b: Dollars): Dollars {.borrow.} 6 7 var a = 20.Dollars 8 9 a = 25 # Doesn't compile 10 a = 25.Dollars # Works fine 11 12 a = 20.Dollars * 20.Dollars # Doesn't compile 13 a = 20.Dollars + 20.Dollars # Works fine 5 Sets 6 Iterators 1 type 2 CustomRange = object 3 low: int 4 high: int 5 6 iterator items(range: CustomRange): int = 7 var i = range.low 8 while i <= range.high: 9 yield i 10 inc i 11 12 iterator pairs(range: CustomRange): tuple[a: int, b: char] = 13 for i in range: # uses CustomRange.items 14 yield (i, char(i + ord('a'))) 15 16 for i, c in CustomRange(low: 1, high: 3): 17 echo c 18 19 # prints: b, c, d 7 Variants 1 # This is an example how an abstract syntax tree could be modelled in Nim 2 type 3 NodeKind = enum # the different node types 4 nkInt, # a leaf with an integer value 5 nkFloat, # a leaf with a float value 6 nkString, # -
C++ Developer Survey "Lite": 2018-02
C++ Developer Survey "Lite": 2018-02 Q1 Where do you use C++? (select all that apply) Answered: 3,280 Skipped: 6 At work At school In personal time, for ho... 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% ANSWER CHOICES RESPONSES At work 87.93% 2,884 At school 13.81% 453 In personal time, for hobby projects or to try new things 72.56% 2,380 Total Respondents: 3,280 1 / 24 C++ Developer Survey "Lite": 2018-02 Q2 How many years of programming experience do you have in C++ specifically? Answered: 3,271 Skipped: 15 1-2 years 3-5 years 6-10 years 10-20 years >20 years 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% ANSWER CHOICES RESPONSES 1-2 years 10.27% 336 3-5 years 20.85% 682 6-10 years 22.87% 748 10-20 years 30.63% 1,002 >20 years 15.38% 503 TOTAL 3,271 2 / 24 C++ Developer Survey "Lite": 2018-02 Q3 How many years of programming experience do you have overall (all languages)? Answered: 3,276 Skipped: 10 1-2 years 3-5 years 6-10 years 10-20 years >20 years 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% ANSWER CHOICES RESPONSES 1-2 years 2.26% 74 3-5 years 11.66% 382 6-10 years 23.78% 779 10-20 years 33.55% 1,099 >20 years 28.75% 942 TOTAL 3,276 3 / 24 C++ Developer Survey "Lite": 2018-02 Q4 What types of projects do you work on? (select all that apply) Answered: 3,269 Skipped: 17 Business (e.g., B2B,.. -
Static If I Had a Hammer
Static If I Had a Hammer Andrei Alexandrescu Research Scientist Facebook c 2012– Andrei Alexandrescu, Facebook. 1/27 In a nutshell (1/2) enum class WithParent { no, yes }; template <class T, WithParent wp> class Tree { class Node { ... }; static if (wp == WithParent::yes) { Node * parent_; } Node * left_, * right_; T payload_; ::: }; Tree<string, WithParent::yes> dictionary; c 2012– Andrei Alexandrescu, Facebook. 2/27 In a nutshell (2/2) template <class It> It rotate(It b, It m, It e) if (is_forward_iterator<It>::value) { ::: } c 2012– Andrei Alexandrescu, Facebook. 3/27 Agenda • Motivation • The static if declaration • Template constraints • Implementation issues c 2012– Andrei Alexandrescu, Facebook. 4/27 • In a nutshell (1/2) • In a nutshell (2/2) • Agenda Motivation • Why static if? • Why not static if? • A non-starter: #if The static if declaration Template Constraints Motivation Implementation Issues Time for ritual speakercide c 2012– Andrei Alexandrescu, Facebook. 5/27 Why static if? • Introspection-driven code ◦ Acknowledged, encouraged: <traits> ◦ Incomplete: no trait-driven conditional compilation • Recursive templates impose signature duplication • Specialization on arbitrary type properties ◦ enable_if incomplete, syntax-heavy, has corner cases • Difficulty in defining policy-based designs • Opportunistic optimizations depending on type properties c 2012– Andrei Alexandrescu, Facebook. 6/27 Why not static if? • Would you define a new function for every if? • Makes advanced libraries ◦ Easy to implement and debug ◦ Easy to understand and use • Simple problems should have simple solutions ◦ “This function only works with numbers” ◦ “This algorithm requires forward iterators” ◦ “I can choose whether this tree has parent pointers” c 2012– Andrei Alexandrescu, Facebook. 7/27 A non-starter: #if • “Conditional compilation” associated with preprocessor • Preprocessing step long before semantic analysis • Poor integration with the language • Impossible to test any trait ◦ Or really anything interesting c 2012– Andrei Alexandrescu, Facebook. -
Dr. Sumant Tambe Dr. Aniruddha Gokhale Software Engineer Associate Professor of EECS Dept
LEESA: Toward Native XML Processing Using Multi-paradigm Design in C++ May 16, 2011 Dr. Sumant Tambe Dr. Aniruddha Gokhale Software Engineer Associate Professor of EECS Dept. Real-Time Innovations Vanderbilt University www.dre.vanderbilt.edu/LEESA 1 / 54 . XML Programming in C++. Specifically, data binding . What XML data binding stole from us! . Restoring order: LEESA . LEESA by examples . LEESA in detail . Architecture of LEESA . Type-driven data access . XML schema representation using Boost.MPL . LEESA descendant axis and strategic programming . Compile-time schema conformance checking . LEESA expression templates . Evaluation: productivity, performance, compilers . C++0x and LEESA . LEESA in future 2 / 54 XML Infoset Cɷ 3 / 54 . Type system . Regular types . Anonymous complex elements . Repeating subsequence . XML data model . XML information set (infoset) . E.g., Elements, attributes, text, comments, processing instructions, namespaces, etc. etc. Schema languages . XSD, DTD, RELAX NG . Programming Languages . XPath, XQuery, XSLT . Idioms and best practices . XPath: Child, parent, sibling, descendant axes; wildcards 4 / 54 . Predominant categories & examples (non-exhaustive) . DOM API . Apache Xerces-C++, RapidXML, Tinyxml, Libxml2, PugiXML, lxml, Arabica, MSXML, and many more … . Event-driven APIs (SAX and SAX-like) . Apache SAX API for C++, Expat, Arabica, MSXML, CodeSynthesis XSD/e, and many more … . XML data binding . Liquid XML Studio, Code Synthesis XSD, Codalogic LMX, xmlplus, OSS XSD, XBinder, and many more … . Boost XML?? . No XML library in Boost (as of May 16, 2011) . Issues: very broad requirements, large XML specifications, good XML libraries exist already, encoding issues, round tripping issues, and more … 5 / 54 XML query/traversal program XML Schema Uses XML Schema Object-oriented C++ Generate i/p Generate Executable i/p Compiler Data Access Layer Compiler (Code Generator) C++ Code . -
Three Cool Things About D
Three Cool Things About D Andrei Alexandrescu Research Scientist Facebook c 2010 Andrei Alexandrescu 1/47 What’s the Deal? c 2010 Andrei Alexandrescu 2/47 PL Landscape • Systems/Productivity languages • Imperative/Declarative/Functional languages • nth generation languages • Compiled/Interpreted/JITed languages • . c 2010 Andrei Alexandrescu 3/47 Sahara • Sahara-sized desert around the crossroads of ◦ High efficiency ◦ Systems-level access ◦ Modeling power ◦ Simplicity ◦ High productivity ◦ Code correctness (of parallel programs, too) c 2010 Andrei Alexandrescu 4/47 Sahara • Sahara-sized desert around the crossroads of ◦ High efficiency ◦ Systems-level access ◦ Modeling power ◦ Simplicity ◦ High productivity ◦ Code correctness (of parallel programs, too) • Traditionally: focus on a couple and try to keep others under control c 2010 Andrei Alexandrescu 4/47 Sahara • Sahara-sized desert around the crossroads of ◦ High efficiency ◦ Systems-level access ◦ Modeling power ◦ Simplicity ◦ High productivity ◦ Code correctness (of parallel programs, too) • Traditionally: focus on a couple and try to keep others under control • C++: ruler of 1-2, strong on 3, goes south after that c 2010 Andrei Alexandrescu 4/47 Sahara • Sahara-sized desert around the crossroads of ◦ High efficiency ◦ Systems-level access ◦ Modeling power ◦ Simplicity ◦ High productivity ◦ Code correctness (of parallel programs, too) • Traditionally: focus on a couple and try to keep others under control • C++: ruler of 1-2, strong on 3, goes south after that • D: holistic approach -
Lock-Free Data Structures
Lock-Free Data Structures Andrei Alexandrescu December 17, 2007 After GenerichProgrammingi has skipped one in- operations that change data must appear as atomic stance (it’s quite na¨ıve, I know, to think that grad such that no other thread intervenes to spoil your school asks for anything less than 100% of one’s data’s invariant. Even a simple operation such as time), there has been an embarrassment of riches as ++count_, where count_ is an integral type, must be far as topic candidates for this article go. One topic locked as “++” is really a three steps (read, modify, candidate was a discussion of constructors, in par- write) operation that isn’t necessarily atomic. ticular forwarding constructors, handling exceptions, In short, with lock-based multithreaded program- and two-stage object construction. One other topic ming, you need to make sure that any operation on candidate—and another glimpse into the Yaslander shared data that is susceptible to race conditions is technology [2]—was creating containers (such as lists, made atomic by locking and unlocking a mutex. On vectors, or maps) of incomplete types, something that the bright side, as long as the mutex is locked, you is possible with the help of an interesting set of tricks, can perform just about any operation, in confidence but not guaranteed by the standard containers. that no other thread will trump on your shared state. While both candidates were interesting, they It is exactly this “arbitrary”-ness of what you can couldn’t stand a chance against lock-free data struc- do while a mutex is locked that’s also problematic.