From ffcd06321377d6d3aef14f57a9c434899d59cd57 Mon Sep 17 00:00:00 2001 From: Mark Sturgill Date: Tue, 15 Oct 2013 13:54:36 -0700 Subject: [PATCH] reduce nested parallelization; profiling shows that it is not optimal for the average use case --- Data/objects.xml | 1486 +++++++++++++++++++++++++++++++++++++--------- Server/Mobile.cs | 108 +--- 2 files changed, 1246 insertions(+), 348 deletions(-) diff --git a/Data/objects.xml b/Data/objects.xml index 25d6a581d..537439ead 100644 --- a/Data/objects.xml +++ b/Data/objects.xml @@ -24,16 +24,39 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -50,43 +73,66 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -143,18 +189,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -170,29 +243,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -222,12 +333,12 @@ - - - - - - + + + + + + @@ -240,8 +351,8 @@ - - + + @@ -287,78 +398,82 @@ - - + + - + - + - - - + + + - + - + - + - - + + - + - - - - - + + + + + - - + + + - + + - - + + - - + + - + - - - - + + + + - - + + - + - - - - - + + + + + + + @@ -384,8 +499,10 @@ + + @@ -402,10 +519,17 @@ + + + + + + + @@ -416,10 +540,19 @@ + + + + + + + + + @@ -433,16 +566,33 @@ + + + - + + + + + + + + + - + + + + + + + @@ -452,21 +602,45 @@ + + + + + + + + + - + + + + + + + + + + - + + + + + + + @@ -495,9 +669,9 @@ - + - + @@ -515,7 +689,7 @@ - + @@ -529,28 +703,28 @@ - + - - - - - + + + + + - - - - - + + + + + - - + + - - - + + + @@ -613,14 +787,16 @@ + + - + - + @@ -647,6 +823,7 @@ + @@ -657,6 +834,8 @@ + + @@ -664,32 +843,42 @@ + + + + + + + + + + @@ -699,13 +888,16 @@ + + + @@ -713,6 +905,7 @@ + @@ -722,6 +915,7 @@ + @@ -737,22 +931,17 @@ - + - - - - - @@ -780,7 +969,6 @@ - @@ -830,20 +1018,26 @@ + + + + + + @@ -859,6 +1053,7 @@ + @@ -866,9 +1061,11 @@ + + @@ -879,6 +1076,11 @@ + + + + + @@ -981,14 +1183,32 @@ + + + + + + + + + + + + + + + + + + @@ -1021,8 +1241,8 @@ - - + + @@ -1059,13 +1279,13 @@ - - - - + + + + - + @@ -1129,13 +1349,26 @@ + + + + + + + + + + + + + @@ -1150,6 +1383,8 @@ + + @@ -1157,6 +1392,7 @@ + @@ -1173,6 +1409,7 @@ + @@ -1187,6 +1424,7 @@ + @@ -1196,19 +1434,41 @@ + + + + + + + - + + + + + + + + + + + + + + + + @@ -1216,16 +1476,20 @@ + - + + + + - + @@ -1236,33 +1500,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1276,7 +1658,10 @@ + + + @@ -1284,126 +1669,211 @@ - + + + + + + + + + + - + - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + + + - + + + + + + + + + + + + + + @@ -1412,6 +1882,11 @@ + + + + + @@ -1424,77 +1899,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + - + + + + + + + + + + - + @@ -1503,10 +2036,18 @@ + + + + + + + + @@ -1515,11 +2056,20 @@ + + + + + + + + + @@ -1531,42 +2081,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + - - + + + @@ -1594,6 +2183,7 @@ + @@ -1621,12 +2211,16 @@ + + + + @@ -1636,10 +2230,12 @@ - + + + @@ -1658,6 +2254,7 @@ + @@ -1671,6 +2268,8 @@ + + @@ -1689,17 +2288,23 @@ + + + + + + @@ -1724,7 +2329,13 @@ + + + + + + @@ -1732,6 +2343,7 @@ + @@ -1741,13 +2353,19 @@ + + + + + + @@ -1768,7 +2386,10 @@ + + + @@ -1779,12 +2400,14 @@ + + - + @@ -1796,6 +2419,7 @@ + @@ -1803,6 +2427,7 @@ + @@ -1819,21 +2444,30 @@ + + + + + + + + + @@ -1844,6 +2478,7 @@ + @@ -1853,6 +2488,7 @@ + @@ -1863,21 +2499,31 @@ + + + + + + + + + + @@ -1911,12 +2557,17 @@ + + + + + @@ -1924,9 +2575,11 @@ + + @@ -1936,8 +2589,11 @@ + + + @@ -1947,6 +2603,8 @@ + + @@ -1954,111 +2612,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - + + + + @@ -2068,57 +2782,66 @@ + + + - + + - + + + - + + + - + - + - + + @@ -2133,12 +2856,14 @@ + - - + + + @@ -2146,6 +2871,9 @@ + + + @@ -2164,7 +2892,7 @@ - + @@ -2212,7 +2940,6 @@ - @@ -2236,6 +2963,7 @@ + @@ -2245,6 +2973,7 @@ + @@ -2263,20 +2992,22 @@ + - + - - + + + - + @@ -2290,6 +3021,7 @@ + @@ -2315,10 +3047,11 @@ - + - - + + + @@ -2328,23 +3061,27 @@ + - + + - + - + + + @@ -2353,106 +3090,295 @@ - + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + - + + + + + + + + - + + + + + + + + + + + + - + - - - - + + + + - - - + + + + + + + + + + + + - - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - + + + + + + + + + + + + + + + + + + + - + - + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + - - + + + @@ -2470,6 +3396,11 @@ + + + + + @@ -2487,156 +3418,173 @@ + + + - + + - + - - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - - - - + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + + - - + + + - - - - - - - + + + + + + + - + - - - + + + - - - + + + - - - + + + - - + + + - - - - + + + + + - - - - + + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + + + + - + + + - - - - - - - - + + + + + + + + + + - - - + + + - - - + + + diff --git a/Server/Mobile.cs b/Server/Mobile.cs index 8984146c2..896e2e2f6 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -10257,24 +10257,9 @@ namespace Server Packet hbpPacket = null; Packet hbyPacket = null; - // 9 Separate Locks.. Feels Dirty - object hitsPacketLock = new object(); - object statPacketTrueLock = new object(); - object statPacketFalseLock = new object(); - object deadPacketLock = new object(); - object hairPacketLock = new object(); - object facialhairPacketLock = new object(); - object hbpPacketLock = new object(); - object hbyPacketLock = new object(); - object cacheSync = new object(); - IPooledEnumerable eable = m.Map.GetClientsInRange(m.m_Location); -#if Framework_4_0 - Parallel.ForEach( eable.Cast(), state => { -#else foreach ( NetState state in eable ) { -#endif beholder = state.Mobile; if( beholder != m && beholder.CanSee( m ) ) @@ -10292,11 +10277,8 @@ namespace Server if( m.IsDeadBondedPet ) { - lock (deadPacketLock) - { - if (deadPacket == null) - deadPacket = Packet.Acquire(new BondedStatus(0, m.m_Serial, 1)); - } + if (deadPacket == null) + deadPacket = Packet.Acquire(new BondedStatus(0, m.m_Serial, 1)); state.Send( deadPacket ); } @@ -10307,35 +10289,24 @@ namespace Server { int noto = Notoriety.Compute( beholder, m ); - Packet p; + Packet p = cache[0][noto]; - lock (cacheSync) - { - p = cache[0][noto]; - - if (p == null) - cache[0][noto] = p = Packet.Acquire(new MobileMoving(m, noto)); - } + if (p == null) + cache[0][noto] = p = Packet.Acquire(new MobileMoving(m, noto)); state.Send( p ); } if ( sendHealthbarPoison ) { - lock (hbpPacketLock) - { - if (hbpPacket == null) - hbpPacket = Packet.Acquire(new HealthbarPoison(m)); - } + if (hbpPacket == null) + hbpPacket = Packet.Acquire(new HealthbarPoison(m)); state.Send( hbpPacket ); } if ( sendHealthbarYellow ) { - lock (hbyPacketLock) - { - if (hbyPacket == null) - hbyPacket = Packet.Acquire(new HealthbarYellow(m)); - } + if (hbyPacket == null) + hbyPacket = Packet.Acquire(new HealthbarYellow(m)); state.Send( hbyPacket ); } @@ -10344,15 +10315,10 @@ namespace Server { int noto = Notoriety.Compute( beholder, m ); - Packet p; + Packet p = cache[1][noto]; - lock (cacheSync) - { - p = cache[1][noto]; - - if (p == null) - cache[1][noto] = p = Packet.Acquire(new MobileMovingOld(m, noto)); - } + if (p == null) + cache[1][noto] = p = Packet.Acquire(new MobileMovingOld(m, noto)); state.Send( p ); } @@ -10362,45 +10328,34 @@ namespace Server { if( m.CanBeRenamedBy( beholder ) ) { - lock (statPacketTrueLock) - { - if (statPacketTrue == null) - statPacketTrue = Packet.Acquire(new MobileStatusCompact(true, m)); - } + if (statPacketTrue == null) + statPacketTrue = Packet.Acquire(new MobileStatusCompact(true, m)); state.Send( statPacketTrue ); } else { - lock (statPacketFalseLock) - { - if (statPacketFalse == null) - statPacketFalse = Packet.Acquire(new MobileStatusCompact(false, m)); - } + if (statPacketFalse == null) + statPacketFalse = Packet.Acquire(new MobileStatusCompact(false, m)); state.Send( statPacketFalse ); } } else if( sendHits ) { - lock (hitsPacketLock) - { - if (hitsPacket == null) - hitsPacket = Packet.Acquire(new MobileHitsN(m)); - } + if (hitsPacket == null) + hitsPacket = Packet.Acquire(new MobileHitsN(m)); state.Send( hitsPacket ); } if( sendHair ) { - lock (hairPacketLock) { - if (hairPacket == null) { - if (removeHair) - hairPacket = Packet.Acquire(new RemoveHair(m)); - else - hairPacket = Packet.Acquire(new HairEquipUpdate(m)); - } + if (hairPacket == null) { + if (removeHair) + hairPacket = Packet.Acquire(new RemoveHair(m)); + else + hairPacket = Packet.Acquire(new HairEquipUpdate(m)); } state.Send( hairPacket ); @@ -10408,13 +10363,11 @@ namespace Server if( sendFacialHair ) { - lock (facialhairPacketLock) { - if (facialhairPacket == null) { - if (removeFacialHair) - facialhairPacket = Packet.Acquire(new RemoveFacialHair(m)); - else - facialhairPacket = Packet.Acquire(new FacialHairEquipUpdate(m)); - } + if (facialhairPacket == null) { + if (removeFacialHair) + facialhairPacket = Packet.Acquire(new RemoveFacialHair(m)); + else + facialhairPacket = Packet.Acquire(new FacialHairEquipUpdate(m)); } state.Send( facialhairPacket ); @@ -10424,9 +10377,6 @@ namespace Server state.Send(this.OPLPacket); } } -#if Framework_4_0 - ); -#endif Packet.Release( hitsPacket ); Packet.Release( statPacketTrue ); @@ -10463,7 +10413,7 @@ namespace Server int count = m_DeltaQueue.Count; int index = 0; - while( m_DeltaQueue.Count > 0 && index++ < count ) + while (m_DeltaQueue.Count > 0 && index++ < count) m_DeltaQueue.Dequeue().ProcessDelta(); #endif }